Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
 Аватар для h_wolf
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212

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

20.08.2013, 17:38. Показов 7415. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.08.2013, 17:38
Ответы с готовыми решениями:

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

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

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

34
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:46
Студворк — интернет-сервис помощи студентам
Или вот так сделать (чтобы до пробела читалось):
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<<" слов";
Добавлено через 3 минуты
Цитата Сообщение от h_wolf Посмотреть сообщение
alsav22, то есть cin доходя до пробела передает слово в массив, выполняется инкремент, проверяется условие, пробел отбрасывается и cin читает следующее слово?
Да, но только cin с оператором вставки: >>, и отбрасываются не только пробелы, но и любые первые пробельные символы, в том числе и '\n'. Т.е. первые отбрасывает (пока не встретит не пробельный), и читает до следующего пробельного символа.
0
 Аватар для h_wolf
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
20.08.2013, 18:49  [ТС]
alsav22, Спасибо большое. Теперь все более менее понятно.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 18:50
Цитата Сообщение от alsav22 Посмотреть сообщение
Или вот так сделать (чтобы до пробела читалось):
C++
1
2
3
4
5
6
7
8
9
char Str[255]={0};
 int count=0;
cout<<"Введите слова, для заверщения введите done:";
 do
 {
 cin.get(Str, 255, ' ').get();
 count++;
 }while(strcmp(Str, "done"));
cout<<"Введено "<<count-1<<" слов";
Хотя так не будет, это я поспешил.
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:53
Цитата Сообщение от h_wolf Посмотреть сообщение
потому как она вводится до вхождения в цикл
string вводится с помощью сin только до первого пробела! т.е. читается 1 слово все остальные отбрасываются! чтобы считать строку полностью нужно использовать: getline(cin, str);

и не придумывайте себе гемороя в задании написано что ввод осущ. по одному слову до тех пор пока не будет введено done, но раз вы так зацепились за те слове после done то можно сделать ввод по одному слову до тех пор пока полз не прекратит ввод, а подсчет только до done

Добавлено через 2 минуты
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;
получился тот скрин в котором после done ещё два слова, здесь считывание пословно, а не всей строки откуда они?
0
20.08.2013, 18:54  [ТС]

Не по теме:

Хулиган, я не придумываю гомерроя, я учусь. Стараюсь выполнять то что требуется по учебнику, а так как в учебнике нет ответов стараюсь придерживаться приведенных результатов.

0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 18:58
Цитата Сообщение от h_wolf Посмотреть сообщение
я не придумываю гомерроя, я учусь
Цитата Сообщение от h_wolf Посмотреть сообщение
Стараюсь выполнять то что требуется по учебнику
в учебнике четко написано: "цикл для чтения по одному слову за раз до тех пор пока не будет введено слово done."
не про какое чтение строки, содержащей все слова, и речи нету!

Добавлено через 1 минуту
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;
получился тот скрин в котором после done ещё два слова, здесь считывание пословно, а не всей строки откуда они?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 19:12
Цитата Сообщение от Хулиган Посмотреть сообщение
в учебнике четко написано: "цикл для чтения по одному слову за раз до тех пор пока не будет введено слово done."
не про какое чтение строки, содержащей все слова, и речи нету!
Цикл и читает по одному слову, а не по строке. Но в задании не говориться, что ввод должен быть по словам (и пример ввода показывает, что ввод должен быть построчный). Иначе как получить пример ввода из первого поста? Я просто из примера ввода перенёс текст в консоль, отсюда и скрин такой получился.

Добавлено через 4 минуты
Хулиган, но, вообще-то, я согласен с вами в том, что текст задания и пример ввода как-то не очень стыкуются.

Добавлено через 2 минуты
Цитата Сообщение от h_wolf Посмотреть сообщение
вводите слова(для завершения введите done):
Если так вводить (по словам), то при введении done должен быть выход из цикла (как вы справедливо и пишите), но как тогда получится такой текст при вводе?
anteater birthday call centr god sex
categoty for inside outside done for sure
Так получится, если только построчно вводить.
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 19:12
Цитата Сообщение от alsav22 Посмотреть сообщение
Но в задании не говориться, что ввод должен быть по словам (и пример ввода показывает, что ввод должен быть построчный).
но ведь всю строку нельзя ввести за раз с помощью cin, считывание из cin выполнится до первого пробела, а все остальное будет утеряно
0
 Аватар для h_wolf
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
20.08.2013, 19:19  [ТС]
Цитата Сообщение от Хулиган Посмотреть сообщение
но ведь всю строку нельзя ввести за раз с помощью cin, считывание из cin выполнится до первого пробела, а все остальное будет утеряно
именно поэтому я и решил изначально использовать cin.get(Str, 255).get()
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 19:23
Цитата Сообщение от Хулиган Посмотреть сообщение
но ведь всю строку нельзя ввести за раз с помощью cin, считывание из cin выполнится до первого пробела, а все остальное будет утеряно
Приблизительно опишу, как всё работает. Набрали в консоле строку, нажали Enter. Всё набранное попало в буфер чтения. cin >> будет читать, в цикле, по слову из буфера, пока не прочтёт всё (буфер пуст), или не произойдёт выход из цикла по уловию. После этого будет ожидать нового ввода и т.д., пока не будет выход из цикла.
0
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 19:29
Цитата Сообщение от h_wolf Посмотреть сообщение
именно поэтому я и решил изначально использовать cin.get(Str, 255).get()
да причем здесь вы, я интересуюсь как с помощью того кода можно было получить такой скрин:

1ввод слова
2проверка != done
3ввод слова(и так до слова done)
...
4 ввод слова done
5 не выполняется условие
6 выход из цикла
7 вывод count-1

последние 2 слова не были введены, а ввод done for sure думаю не правильный поскольку с тем же успехом можно было ввести anteater birthday call centr god sex
categoty for inside outside и ни к чему хорошему это не привело!

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
пока не прочтёт всё (буфер пуст)
ну как бы перед каждым cin>>srt буфер очищается

Добавлено через 1 минуту
cin is tied to the standard output stream cout (see ios::tie), which indicates that cout's buffer is flushed (see ostream::flush) before each i/o operation performed on cin.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 19:31
Используя отладчик можно увидеть как cin >> читает в цикле. Ожидание ввода, пишется строка, Enter. Начинается чтение в цикле по словам, потом ожидание следующей строки.
0
 Аватар для Hugra
50 / 50 / 9
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
20.08.2013, 19:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
using namespace std;
const int STR_LIM = 50;
int main()
{
    system("chcp 1251");
    system("title Ch.5 Ex.8");
 
    char word[STR_LIM];
    int count = 0;
    
    cout << "Enter words (to stop, type the word done):\n";
    
    while (cin >> word && strcmp("done", word))
        ++count;
 
    cout << "You entered a total of " << count << " words.\n";
 
 
    system("PAUSE");
    return 0;
}
Мое решение.

Не по теме:

Отличная книга,мне нравится. Выполняю все задачи с энтузиазмом. С нетерпением изучаю новую главу, что бы в конце главы порешать задачки =) Сейчас дочитал 12-ю главу:"Классы и динамическое выделение памяти."
Если модераторы разрешат изменять первый пост, то буду выкладывать все решения, иначе дорешаю все задачки и создам пост,если никто не опередит =)

0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 19:35
Цитата Сообщение от Хулиган Посмотреть сообщение
ну как бы перед каждым cin>>srt буфер очищается
Есть буфер ввода и буфер вывода. Я пишу о буфере ввода. В приведённой вами цитате, речь идёт об очистке буфера вывода, перед операцией ввода.
1
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
20.08.2013, 23:27
Цитата Сообщение от alsav22 Посмотреть сообщение
Есть буфер ввода и буфер вывода
ааа, все понял, спасибо)) приношу свои извинения за вынос мозга..перепутал потоки
просто надо было разобраться откуда те два слова)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.08.2013, 23:27

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

Считать текст из Rich TextBox в строку, разбить её на слова ...
Надо считать текст из Rich TextBox в строку, разбить её на слова,выбрать самые встречающиеся и затем вывести эти слова с количеством...

Считать список, парные слова вывести в одну строку, а непарные в другую
Помогите пожалуйста, написал такой вот код, нужно считать список, и парные слова вывести в одной строке, а непарные в другой. Программа...

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

Алгоритмическая задача. Считать текст из файла и подсчитать частоту вхождения каждого слова
Братство,всем здравия!Я новичок и здесь, и в теме программинга, и в теме C#.Но очень хочу осилить стезю. Есть возможность попасть на...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru