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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
#1

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

20.08.2013, 17:38. Просмотров 1683. Ответов 34
Метки нет (Все метки)

Буду очень признателен за направление в нужно русло (готового ответа не надо, я хочу понять сам, только направление )

***
Условие:
Написать программу которая использует массив 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 посчитать слова в строке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 17:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прата С. Задача считать строку до слова done (C++):

Как считать строку и разбить ее на слова? - C++
Задача на С. (стандарт) Необходимо считать строку и разбить ее на слова (слова разделены пробелами (не меннее одного)). Количество слов и...

Прата задача 6.9 - C++
Всем доброго времени суток, подскажите как сделать что бы программа в строке 32 принимала имена с пробелами. Если открываю файл без...

С.Прата, задача 3.5 - C++
Гляньте, пожалуйста. Задача на преобразование целочисленных типов в с плавающей точкой. Вроде бы я решил: // запрос населения Земли и...

C++ - Прата задача 6.9 - C++
Подскажите пожалуйста в чем ошибка?не обрабатывается условие неправильного ввода имени файла. #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Прата, задача 2, глава 6 - C++
Доброго времени суток. Учу программирования по книжке Прата. И вот такая задача: &quot;Напишите программу, которая считывает до десяти...

Странная задача из Прата 2011 - C++
Задача во вложении. Пользоваться циклами и ветвлениями нельзя, т.к. их еще не дают на этапе этого задания. Как понизить грейд? Что-то с...

34
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 17:53 #2
Делайте ввод в цикле while()(например, через cin >> в массив char). В каждой итерации подсчёт и сравнение с done.
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 17:55 #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);
}
}
надо копать чтот в этом направлении
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:07 #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;
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:11 #5
Цитата Сообщение от alsav22 Посмотреть сообщение
string str
так ему вроде бы нужно использовать массив char

Добавлено через 2 минуты
Цитата Сообщение от h_wolf Посмотреть сообщение
и цикл для чтения по одному слову за раз до тех пор пока не будет введено слово done
Цитата Сообщение от h_wolf Посмотреть сообщение
Насколько видно из примерного текста вывода программы слова необязательно отделены друг от друга знаком новой строки, то есть надо читать всю строку, а потом в ней считать слова до слова done.
насколько видно в задании уже указанно что и как считывать
0
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
20.08.2013, 18:15  [ТС] #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<<" слов";
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:17 #7
Цитата Сообщение от h_wolf Посмотреть сообщение
Но вопрос в том что пример вывода указаны в учебнике говорит о том что должно быть все-таки по другому.
Пример вывода в первом посте? И почему по другому?
0
Миниатюры
Прата С. Задача считать строку до слова done  
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:19 #8
Цитата Сообщение от h_wolf Посмотреть сообщение
Но вопрос в том что пример вывода указаны в учебнике говорит о том что должно быть все-таки по другому.
ничего не понятно, пример вывода в студию!
0
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
20.08.2013, 18:20  [ТС] #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 слов(а).
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:21 #10
Цитата Сообщение от h_wolf Посмотреть сообщение
Потому что введено две строки и слово done в середине второй строки а не в конце. и при подсчете слов два слова стоящие за done не считались.
Так и вводите, будет работать (скрин смотрите).
0
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
20.08.2013, 18:26  [ТС] #11
alsav22, прошу прощения, действительно так и работает. Тогда подскажите а что не так у меня в случаем с char массивом??
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:29 #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<<" слов";
1
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
20.08.2013, 18:30 #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;
}
1
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
20.08.2013, 18:32  [ТС] #14
alsav22, почему так?
0
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:32 #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Так и вводите, будет работать (скрин смотрите).
при вводе done пост условие не выполняется и происходит выход из цикла, как получился такой скрин?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 18:32
Привет! Вот еще темы с ответами:

Двумерный массив и циклы. С. Прата, задача 5.6 - C++
С. Прата, Язык программирования С++, глава 5, задача 6. Напишите программу, которая позволит ввести ежемесячные объёмы продаж в единицах...

Как считать строку scanf'ом при этом не переходя на новую строку, т.е. без использования Enter'а - C++
Как считать строку scanf'ом при этом не переходя на новую строку, т.е. без использования Enter'а, необходимо для интерактивного ввода в...

Разбить строку на слова, добавить эти слова в массив строк - C++
Привет всем! Понадобилось решить одну простенькую задачку: Разбить строку на слова, добавить эти слова в массив строк, вывести...

Строка: Строку разбить на слова и слова запихнуть в массив char. - C++
Вобщем пока нужно: 1) строку разбить на слова и слова запихнуть в масив char. но у меня почему то вообще не то записывает в масив, хоча...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
20.08.2013, 18:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru