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

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

Войти
Регистрация
Восстановить пароль
 
gr1nberg
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 20
#1

Строки. ошиьки наборщиков текста - C++

03.05.2011, 19:12. Просмотров 550. Ответов 8
Метки нет (Все метки)

Задача:
Часто встречающаяся ошибка начинающих наборщиков – дважды записанное слово. Обнаружить и исправить такие ошибки.
Можно написать программу для microsoft visual studio

Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
531 / 436 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.05.2011, 19:14     Строки. ошиьки наборщиков текста #2
Т.е. "приветпривет" - это ошибка?
gr1nberg
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 20
03.05.2011, 19:18  [ТС]     Строки. ошиьки наборщиков текста #3
Цитата Сообщение от Mиxaил Посмотреть сообщение
Т.е. "приветпривет" - это ошибка?
это не ошибка
пример:
"Привет привет как дела дела"
Вывод правильный ответ такой:
"Привет как дела"
тоесть слова должен разделять какойто знак
Kastaneda
Форумчанин
Эксперт С++
4468 / 2830 / 224
Регистрация: 12.12.2009
Сообщений: 7,199
Записей в блоге: 1
Завершенные тесты: 1
03.05.2011, 19:29     Строки. ошиьки наборщиков текста #4
Вот же, несколько часов назад писали. То, что там выше - согласен, сложно для понимания, но этот код на чистом C, проще не куда.
Mиxaил
531 / 436 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.05.2011, 19:35     Строки. ошиьки наборщиков текста #5
Вот, потестируйте, накатал быстро:
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
#include <iostream>
#include <string>
 
void ChangeString (std::string Str)
{
    std::string S = Str + " ";
    std::string FirstWord, SecondWord;
    while (!S.empty())
    {
        FirstWord.append (S, 0, S.find(" "));
        S.erase(0, S.find(" ") + 1);
        if (!S.empty())
        {
            SecondWord.append(S, 0, S.find(" "));
            if (FirstWord == SecondWord)
                Str.erase(Str.find(SecondWord), SecondWord.length() + 1);
        }
        FirstWord.clear();
        SecondWord.clear();
    }
    std::cout << Str << std::endl;
}
 
int main()
{
    std::string MainString;
    MainString = "hello hello how are are you";
    ChangeString (MainString);
    std::cin.get();
    return 0;
}
Добавлено через 1 минуту
Я плохо, конечно, сделал, что изменил строку пользователя, удаляя слова!
Сохраните в другую переменную, и все дела!

Добавлено через 1 минуту
Странно, работает на всех текстах, которые я ставил!
gr1nberg
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 20
03.05.2011, 19:36  [ТС]     Строки. ошиьки наборщиков текста #6

Я плохо, конечно, сделал, что изменил строку пользователя, удаляя слова!
Сохраните в другую переменную, и все дела!
можно как нибудь более просто написать
просто я первый курс и тока начал изучать нечего не понял что тут написано)))
Mиxaил
531 / 436 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.05.2011, 19:43     Строки. ошиьки наборщиков текста #7
Это код на чистом Си++...
Принцип такой: сначала вырезаем первое слово, затем - второе, если они равны, то вырезаем второе слово из исходной строки, и так в цикле, пока не встретим отличное слово...

Не по теме:

Я сам на первом курсе, в универе только Pascal пока



Добавлено через 2 минуты
Немного оптимизировал:
Замените строку
C++
1
Str.erase(Str.find(SecondWord), SecondWord.length() + 1);
на
C++
1
Str.erase(Str.find(SecondWord + " " + SecondWord), SecondWord.length() + 1);
gr1nberg
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 20
03.05.2011, 19:48  [ТС]     Строки. ошиьки наборщиков текста #8
Цитата Сообщение от Mиxaил Посмотреть сообщение
Это код на чистом Си++...
Принцип такой: сначала вырезаем первое слово, затем - второе, если они равны, то вырезаем второе слово из исходной строки, и так в цикле, пока не встретим отличное слово...

Не по теме:

Я сам на первом курсе, в универе только Pascal пока



Добавлено через 2 минуты
Немного оптимизировал:
Замените строку
C++
1
Str.erase(Str.find(SecondWord), SecondWord.length() + 1);
на
C++
1
Str.erase(Str.find(SecondWord + " " + SecondWord), SecondWord.length() + 1);
все равно не понимаю))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 19:54     Строки. ошиьки наборщиков текста
Еще ссылки по теме:

C++ Часто встречающаяся ошибка начинающих наборщиков — дважды записанное слово. В заданном текстовом файле обнаружить и исправить такие ошибки в тексте
Перевод из c# в с++: удаление заданного текста из строки C++
Составить процедуру выравнивания заданной строки текста C++
C++ Изменение строки текста в exe файле
Строки исходного текста, начинающиеся с латинской буквы «а» C++

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

Или воспользуйтесь поиском по форуму:
Mиxaил
531 / 436 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.05.2011, 19:54     Строки. ошиьки наборщиков текста #9
Строка
Цитата Сообщение от Mиxaил Посмотреть сообщение
while (!S.empty())
означает, что я проверяю, не пуста ли строка...
Строка
Цитата Сообщение от Mиxaил Посмотреть сообщение
FirstWord.append (S, 0, S.find(" "));
означает, что я копирую в FirstWord символы, начиная с 0 по номер вхождения первогопробела в строку S...
Строка
Цитата Сообщение от Mиxaил Посмотреть сообщение
S.erase(0, S.find(" ") + 1);
означает, что из строки S удаляем слово, начинающиеся с начала, и заканчивающееся первым пробелом...
Строка
Цитата Сообщение от Mиxaил Посмотреть сообщение
FirstWord.clear();
означает, что я очищаю строку для дальнейшего использования!

Добавлено через 1 минуту
Если знаете английский, почитайте
About C++, тут все написано...
Yandex
Объявления
03.05.2011, 19:54     Строки. ошиьки наборщиков текста
Ответ Создать тему
Опции темы

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