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

Нужен совет для решения задачи - C++

Восстановить пароль Регистрация
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 11:46     Нужен совет для решения задачи #1
Задача. Написать программу которая читает последовательность слов с стандартного устройства ввода. И находит среди них повторяющихся..........

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

Как можно сохранит целые слова?

Эта задача в странице 234. Липпман "Вводной курс" Четвертое здание. 2012 год. До этого изучали циклы, массивы, вектор, стринг, операторы if, switch.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
31.05.2014, 11:54     Нужен совет для решения задачи #2
Цитата Сообщение от Altair42 Посмотреть сообщение
До этого изучали циклы, массивы, вектор, стринг
Ну вот. vector и string знаете:
C++
1
2
3
4
5
6
vector<string> vv;
string t;
while(cin>>t)// читаем очередное слово
{
    vv.push_back(t); // запихиваем его в вектор
}
8-BITOV
513 / 455 / 83
Регистрация: 05.05.2014
Сообщений: 1,077
31.05.2014, 11:57     Нужен совет для решения задачи #3
Цитата Сообщение от Altair42 Посмотреть сообщение
До этого изучали циклы, массивы, вектор, стринг...
Заведи вектор, да добавляй в него свои слова-стринги...
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 12:07  [ТС]     Нужен совет для решения задачи #4
Я об этом уже думал но string и vector сохраняет каждый символ а не целое слово. Потом не возможно будет сравнит слова. Ибо в памяти будет только составляющие слов. Так как можно ввести неограниченное количество слов любого размера очень сложно определит где начали и конец следующего слово чтоб организовать их по очереди и сравнит.

Для этого надо написать цикл чтоб проверял каждый символ пока не встретит пробел и сохранял их. Сохранит каждый символ до следующего пробела и до следующего.... это может продолжится вечно .

И что дальше? Я не знаю как сохранит целое слово. Допустим получили первое слово в виде нескольких элементов вектора. Как получит второе слово?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
31.05.2014, 12:09     Нужен совет для решения задачи #5
Цитата Сообщение от Altair42 Посмотреть сообщение
о string сохраняет каждый символ
С чего бы это? На то она и string, чтобы хранить целую строку.
И cin>>t считывает как раз одно слово, пропуская пробелы.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 12:21  [ТС]     Нужен совет для решения задачи #6
В принципе можно запомнит несколько стрингов и сравнит их и без вектора. Но это не возможно делать при вводе с консоли. Можно ввести неограниченное количество слов.

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

Добавлено через 2 минуты
zss, вот именно. Оно читает все подряд. Но сохраняется отдельные символы.
пример.
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
int main()
{
    setlocale(LC_ALL,"Russian");
    std::string text;
    std::vector<char> vChar;
    std::cout << " Введите текст. " << std::endl;
    std::getline(std::cin,text);
    char s;
    std::cout << " Введите 4 буквы которых надо найти в тексте " << std::endl;
    while(std::cin >> s)
        vChar.push_back(s);
    
    int numChr1 = 0;
    for(std::vector<char>::size_type i = 0; i < vChar.size(); i ++)
    {
        for(std::string::size_type j = 0; j < text.size(); j++)     
        {
            if(vChar[i] == text[j])
                ++numChr1;
        }
        std::cout << "Число букв " << vChar[i] << " " << numChr1 << std::endl;
        numChr1 = 0;
    }
    
    getch();
    return 0;
 }
При вводе любого количество символов( букв, пробелов и все такое), слов, даже целого текста. Программа читает символы по одному.

Добавлено через 4 минуты
В принципе эта задача очень простая.
- объявит 10 разных стрингов.
- ввести с консоли 10 слов на каждый стринг.
- сравнивать стринги а не слова.

А что если придется ввести не 10 слов а 20? Переписать код?
Hrollo
34 / 34 / 6
Регистрация: 05.11.2013
Сообщений: 147
31.05.2014, 12:29     Нужен совет для решения задачи #7
надо создавать не vector<char> , а vector<string>
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
31.05.2014, 12:33     Нужен совет для решения задачи #8
Altair42, вы указали,что читаете Липпмана,и я хочу вам сказать Вы очень невнимательно читаете
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2014, 12:47     Нужен совет для решения задачи
Еще ссылки по теме:

Нужны задачи для решения C++
C++ Нужен совет в выборе темы для курсовой по ООП. 2 курс
Составить программу для решения математической задачи (для любых допустимых значений углов и сторон) C++

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

Или воспользуйтесь поиском по форуму:
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
31.05.2014, 12:47  [ТС]     Нужен совет для решения задачи #9
Hrollo, да я и создаю vector<string>

Цитата Сообщение от Tuma Посмотреть сообщение
Altair42, вы указали,что читаете Липпмана,и я хочу вам сказать Вы очень невнимательно читаете
В смысле? Что именно я пропустил?

Сам стринг сохраняет все что написано в консоли. Но сохраняет по буквам пример того следующий цикл.

C++
1
2
3
4
5
for(std::string::size_type j = 0; j < text.size(); j++)     
        {
            if(vChar[i] == text[j])
                ++numChr1;
        }
Тут при итерации j переходит не c слово к слову а с буквы на следующую. При сохранение стринга на вектор будет тоже самое.

Добавлено через 6 минут
Все разобрался. Спасибо всем. Стринг читает по буквам а вектор до пробела.

Добавлено через 33 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    setlocale(LC_ALL,"Russian");
    std::string text;
    std::vector<std::string> vtext;
   std::cout << " Введите несколько слов "<< std::endl;
   while(std::cin >> text)
       vtext.push_back(text);
       for(std::vector<std::string>::iterator iter = vtext.begin();
           iter < vtext.end(); iter++)
           std::cout << *iter << std::endl;
    getch();
    return 0;
 }
Добавлено через 1 минуту
Наверно надо отдохнут. С 8 утра за компом. Даже не поел
Yandex
Объявления
31.05.2014, 12:47     Нужен совет для решения задачи
Ответ Создать тему
Опции темы

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