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

Прата С. Задача считать строку до слова done - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 17:38     Прата С. Задача считать строку до слова done #1
Буду очень признателен за направление в нужно русло (готового ответа не надо, я хочу понять сам, только направление )

***
Условие:
Написать программу которая использует массив char и цикл для чтения по одному слову за раз до тех пор пока не будет введено слово done. Затем программа должна сообщить количество введенных слов(исключая done).

пример вывода:

вводите слова(для завершения введите done):
anteater birthday call centr god sex
categoty for inside outside done for sure
Вы ввели 10 слов(а).

***
Насколько видно из примерного текста вывода программы слова необязательно отделены друг от друга знаком новой строки, то есть надо читать всю строку, а потом в ней считать слова до слова done.
Не могу придумать алгоритма решения никак. опять таки необходимо использовать только изученные средства - циклы, массивы, string, strcmp и пр. if..else нам не известны.
Для решения необходимо использовать только массивы (одномерные, двумерные), циклы, структуры, функции-члены cin, объект класса string, операции сравнения (<,>,!= и пр.)

Добавлено через 1 минуту
только не понятно как без if посчитать слова в строке.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 17:53     Прата С. Задача считать строку до слова done #2
Делайте ввод в цикле while()(например, через cin >> в массив char). В каждой итерации подсчёт и сравнение с done.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 17:55     Прата С. Задача считать строку до слова done #3
C++
1
2
3
4
5
6
7
8
9
10
...;
char buf[20];
int count=0;
getline(cin, buf);
while(buf!="done")
{
    count++;
    getline(cin, buf);
}
}
надо копать чтот в этом направлении
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:07     Прата С. Задача считать строку до слова done #4
C++
1
2
3
4
5
6
7
8
9
cout << "Input string: ";
string str = "";
int i = 0;
do 
{
     cin >> str;
     ++i; 
} while (str != "done");
cout << i - 1 << endl;
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:11     Прата С. Задача считать строку до слова done #5
Цитата Сообщение от alsav22 Посмотреть сообщение
string str
так ему вроде бы нужно использовать массив char

Добавлено через 2 минуты
Цитата Сообщение от h_wolf Посмотреть сообщение
и цикл для чтения по одному слову за раз до тех пор пока не будет введено слово done
Цитата Сообщение от h_wolf Посмотреть сообщение
Насколько видно из примерного текста вывода программы слова необязательно отделены друг от друга знаком новой строки, то есть надо читать всю строку, а потом в ней считать слова до слова done.
насколько видно в задании уже указанно что и как считывать
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 18:15  [ТС]     Прата С. Задача считать строку до слова done #6
Хулиган, alsav22,

Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
cout << "Input string: ";
string str = "";
int i = 0;
do 
{
     cin >> str;
     ++i; 
} while (str != "done");
cout << i - 1 << endl;
вот так задачу я и решил. Но вопрос в том что пример вывода указаны в учебнике говорит о том что должно быть все-таки по другому.

Добавлено через 1 минуту
Этот алгоритм можно применить и для char массива.

C++
1
2
3
4
5
6
7
8
9
10
11
char Str[255]{0};
    int count=0;
 
    cout<<"Введите слова, для заверщения введите done:";
    do
    {
        cin.get(Str, 255).get();
        count++;
    }while(strcmp(Str, "done"));
 
    cout<<"Введено "<<count-1<<" слов";
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:17     Прата С. Задача считать строку до слова done #7
Цитата Сообщение от h_wolf Посмотреть сообщение
Но вопрос в том что пример вывода указаны в учебнике говорит о том что должно быть все-таки по другому.
Пример вывода в первом посте? И почему по другому?
Миниатюры
Прата С. Задача считать строку до слова done  
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:19     Прата С. Задача считать строку до слова done #8
Цитата Сообщение от h_wolf Посмотреть сообщение
Но вопрос в том что пример вывода указаны в учебнике говорит о том что должно быть все-таки по другому.
ничего не понятно, пример вывода в студию!
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 18:20  [ТС]     Прата С. Задача считать строку до слова done #9
alsav22,
Цитата Сообщение от h_wolf Посмотреть сообщение
пример вывода:
вводите слова(для завершения введите done):
anteater birthday call centr god sex
categoty for inside outside done for sure
Вы ввели 10 слов(а).
Потому что введено две строки и слово done в середине второй строки а не в конце. и при подсчете слов два слова стоящие за done не считались.

Добавлено через 17 секунд
Хулиган,
Цитата Сообщение от h_wolf Посмотреть сообщение
пример вывода:
вводите слова(для завершения введите done):
anteater birthday call centr god sex
categoty for inside outside done for sure
Вы ввели 10 слов(а).
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:21     Прата С. Задача считать строку до слова done #10
Цитата Сообщение от h_wolf Посмотреть сообщение
Потому что введено две строки и слово done в середине второй строки а не в конце. и при подсчете слов два слова стоящие за done не считались.
Так и вводите, будет работать (скрин смотрите).
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 18:26  [ТС]     Прата С. Задача считать строку до слова done #11
alsav22, прошу прощения, действительно так и работает. Тогда подскажите а что не так у меня в случаем с char массивом??
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:29     Прата С. Задача считать строку до слова done #12
Цитата Сообщение от h_wolf Посмотреть сообщение
Тогда подскажите а что не так у меня в случаем с char массивом??
C++
1
2
3
4
5
6
7
8
9
10
11
char Str[255] = {0};
int count=0;
 
cout<<"Введите слова, для заверщения введите done:";
do
{
     cin >> Str;
     count++;
}while(strcmp(Str, "done"));
 
cout<<"Введено "<<count-1<<" слов";
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.08.2013, 18:30     Прата С. Задача считать строку до слова done #13
Как вариант :/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
 
int main() {
   const int SIZE = 256;
   int cnt = 0;
   char word[ SIZE ];
   
   while (( std::cin >> word ) && std::strcmp( "done", word ))
      cnt++;
   
   std::cout << cnt << std::endl;
   
   return 0;
}
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 18:32  [ТС]     Прата С. Задача считать строку до слова done #14
alsav22, почему так?
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:32     Прата С. Задача считать строку до слова done #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Так и вводите, будет работать (скрин смотрите).
при вводе done пост условие не выполняется и происходит выход из цикла, как получился такой скрин?
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 18:36  [ТС]     Прата С. Задача считать строку до слова done #16
Хулиган, мне кажется все правильно, так и должно быть.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:39     Прата С. Задача считать строку до слова done #17
Цитата Сообщение от Хулиган Посмотреть сообщение
при вводе done пост условие не выполняется и происходит выход из цикла, как получился такой скрин?
Так и должен быть выход из цикла. сin >> читает по словам в цикле ('\n' пропускает), доходит до done и выход из цикла.

Добавлено через 1 минуту
Цитата Сообщение от h_wolf Посмотреть сообщение
alsav22, почему так?
У вас в коде ошибка в том, что нужно использовать методы, которые чимают до пробела, а не всю строку, как cin.get().
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:41     Прата С. Задача считать строку до слова done #18
Цитата Сообщение от alsav22 Посмотреть сообщение
читает по словам в цикле, доходит до done и выход из цикла.
ну да, но у вас на скрине после done введено ещё 2 слова, после выхода из цикла, это как?
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 18:41  [ТС]     Прата С. Задача считать строку до слова done #19
alsav22, то есть cin доходя до пробела передает слово в массив, выполняется инкремент, проверяется условие, пробел отбрасывается и cin читает следующее слово?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 18:42     Прата С. Задача считать строку до слова done
Еще ссылки по теме:

Прата задача 6.9 C++
Разбить строку на слова, добавить эти слова в массив строк C++
C++ C++ - Прата задача 6.9

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

Или воспользуйтесь поиском по форуму:
h_wolf
 Аватар для h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 211
20.08.2013, 18:42  [ТС]     Прата С. Задача считать строку до слова done #20
Хулиган, Эти слова вводятся целой строкой, а цикл читает до пробела и переходит к следующему слову пока не упрется в done. Строку же видно целиком потому как она вводится до вхождения в цикл
Yandex
Объявления
20.08.2013, 18:42     Прата С. Задача считать строку до слова done
Ответ Создать тему
Опции темы

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