Форум программистов, компьютерный форум CyberForum.ru

Задача со строкой - C++

Восстановить пароль Регистрация
 
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 19:18     Задача со строкой #1
Помогите разобраться.
По заданию необходимо ввести строку, а потом вывести те слова, в которых буква а повторяется дважды. Со строкой работать как с одномерным массивом символов.
Как ввести строку я разобралась
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main ()
{
    const int MAX_LEN = 101;
    char str[MAX_LEN];
    cout << "Enter a string (max "<< MAX_LEN-1 << " symbols)\n";
    cin.getline (str, MAX_LEN);
 
    return 0;
}
а вот дальше понимаю.
Объясните, как сделать то что нужно по заданию, можно без кода, просто алгоритм действий, а то работа со строками мне тяжело дается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 19:18     Задача со строкой
Посмотрите здесь:

C++ Операции со строкой
Работа со строкой C++
Подскажите со строкой C++
работа со строкой C++
Работа со строкой C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
16.12.2011, 19:30     Задача со строкой #2
алгоритм таков:
-выделяешь слова(начало,конец) с помощью поиска разделителей между словам(пробел,точка и т.д)
-проверяешь найденное слово на наличие 2х а
-и дальше возвращаешься к пункту 1 где начинаешь откуда остановился
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.12.2011, 19:31     Задача со строкой #3
C++
1
2
3
4
5
6
7
int i;
char* c;
for(char* p = strtok(str, " \t.,"); p; p = strtok(NULL, " \t.,")) {
     for(i = 0, c = p; (c = strchr(c, 'a')); *c++, i++); 
     if(i == 2)
         cout << p << endl;
}
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 21:27  [ТС]     Задача со строкой #4
vetal10, а можно подробнее, какое действие каким циклом лучше реализовать?

xAtom, требование преподавателя - написать без использования библиотечных функций из string.
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
16.12.2011, 21:42     Задача со строкой #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int start=0,end=0,count=0;
for(int i=0;i<MAX_LEN;i++){
 if(str[i]==' ' || str[i]==',' || str[i]=='.' || str[i]=='?' || str[i]=='!'){
  end=i-1;
  for(int j=start;j<end;j++){
   if(str[j]=='a')
   ++count;
  }
  if(count==2){
   for(int j=start;j<end;j++)
    cout<<str[j];
   cout<<",";
  }
  start=end+2;
 }
}
вроде так
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 22:01  [ТС]     Задача со строкой #6
vetal10, программа ничего не выводит.
нехорошо, конечно, когда за тебя решают, но последняя задача в семестре, голова совсем не варит(
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
16.12.2011, 22:12     Задача со строкой #7
она работает только если 2 буквы "а" в слове
вот слегка подредактировал все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include<conio.h>
using namespace std;
 
int main ()
{
    const int MAX_LEN = 101;
    char str[MAX_LEN];
    cout << "Enter a string (max "<< MAX_LEN-1 << " symbols)\n";
    cin.getline (str, MAX_LEN);
    int start=0,end=0,count=0;
    for(int i=0;i<MAX_LEN;i++){
        if(str[i]==' ' || str[i]==',' || str[i]=='.' || str[i]=='?' || str[i]=='!'|| str[i]=='\0'){
            end=i;
            for(int j=start;j<end;j++){
                if(str[j]=='a')
                    ++count;
            }
            if(count==2){
                for(int j=start;j<end;j++)
                    cout<<str[j];
                cout<<",";
            }
            start=end+1;
                        count=0;
        }
    }
    getch();
    return 0;
}
или тебе на русские "а"?
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 22:27  [ТС]     Задача со строкой #8
vetal10, да мне не принципиально какие а )))
Еще надо учитывать, что стоит между словами - если знак препинания пробел, то start=end+2, если просто пробел , то start=end+1.
Переписала немного
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
using namespace std;
 
int main ()
{
    const int MAX_LEN = 101;
    char str[MAX_LEN];
    cout << "Enter a string (max "<< MAX_LEN-1 << " symbols)\n";
    cin.getline (str, MAX_LEN);
 
    int start=0,end=0,count=0;
    for(int i=0;i<MAX_LEN;i++)
    {
        if(str[i]==' ' || str[i]==',' || str[i]=='.' || str[i]=='?' || str[i]=='!')
        {
            end=i;
            for(int j=start;j<end;++j)
            {
                if(str[j]=='a')
                ++count;
            }
            
            if(count==2)
            {
                for(int j=start;j<end;++j)
                cout << str[j];
                cout<<",";
            }
 
            if (str[end]==',' || str[end]=='.' || str[end]=='?' || str[end]=='!')
            {
                start=end+2;
            }
            if (str[end]==' ')
            {
                start=end+1;
            }
 
        }
    }
 
    cout << "\n";
 
    return 0;
}
но не работает - ничего не выводит, - не могу найти, что не так (((
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
16.12.2011, 22:31     Задача со строкой #9
C++
1
2
3
4
5
6
7
8
9
if (str[end]==',' || str[end]=='.' || str[end]=='?' || str[end]=='!')
                        {
                                start=end+2;
                        }
                        if (str[end]==' ')
                        {
                                start=end+1;
                        }
                        count=0;
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 22:35  [ТС]     Задача со строкой #10
vetal10, да-да, просекла уже, только что-то все равно не шуршит.
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
16.12.2011, 22:48     Задача со строкой #11
у меня все отлично работает.что у тебя не работает?
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 22:55  [ТС]     Задача со строкой #12
ничего не выводит.
у меня отличия с твоей программой в том, что не подключен
C++
1
#include<conio.h>
и нет строки
C++
1
getch()
но я не знаю, для чего они, поэтому писать не стала, а так все остальное вроде то же самое.
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
16.12.2011, 22:58     Задача со строкой #13
то есть у тебя прога отработала и сразу закрывается??
getch ето функция считывания символа без эха,применяется как задержка ну или можешь написать
system("pause")
и юзай msdn ето ф1 в студии
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 23:07  [ТС]     Задача со строкой #14
ок, раз #include<conio.h> и getch() не критично, пока обойдусь без них.
у меня прога ничего не выводит, и пишет press any key to continue
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
using namespace std;
 
int main ()
{
    const int MAX_LEN = 101;
    char str[MAX_LEN];
    cout << "Enter a string (max "<< MAX_LEN-1 << " symbols)\n";
    cin.getline (str, MAX_LEN);
 
    int start=0,end=0,count=0;
    for(int i=0;i<MAX_LEN;i++)
    {
        if(str[i]==' ' || str[i]==',' || str[i]=='.' || str[i]=='?' || str[i]=='!')
        {
            end=i;
            for(int j=start;j<end;j++)
            {
                if(str[j]=='a')
                ++count;
            }
            
            if(count==2)
            {
                for(int j=start;j<end;j++)
                {
                    cout << str[j];
                }
            }
 
            if (str[end]==',' || str[end]=='.' || str[end]=='?' || str[end]=='!')
            {
                start=end+2;
            }
            if (str[end]==' ')
            {
                start=end+1;
            }
        }
    }
 
    cout << "\n";
 
    return 0;
}
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
16.12.2011, 23:12     Задача со строкой #15
ну так ты ничего и не поменяла. у меня твой код работает если вставить задержку. и ты каунт так и не обнуляешь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 23:14     Задача со строкой
Еще ссылки по теме:

C++ Работа со строкой
C++ непонятно со строкой
C++ работа со строкой

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
16.12.2011, 23:14  [ТС]     Задача со строкой #16
vetal10, да, точно, обнулить каунт забыла, спасибо, всё работает!
Yandex
Объявления
16.12.2011, 23:14     Задача со строкой
Ответ Создать тему
Опции темы

Текущее время: 07:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru