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

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

Восстановить пароль Регистрация
 
gr1nberg
0 / 0 / 0
Регистрация: 27.12.2010
Сообщений: 20
03.05.2011, 19:12     Строки. ошиьки наборщиков текста #1
Задача:
Часто встречающаяся ошибка начинающих наборщиков – дважды записанное слово. Обнаружить и исправить такие ошибки.
Можно написать программу для microsoft visual studio

Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 19:12     Строки. ошиьки наборщиков текста
Посмотрите здесь:

C++ Строки (преобразование текста)
C++ Строки(стринг).....удаление слов из текста
Преобразование строки текста C++
C++ строки. расшифровка текста
C++ Чтение/анализ строки текста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 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
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
03.05.2011, 19:29     Строки. ошиьки наборщиков текста #4
Вот же, несколько часов назад писали. То, что там выше - согласен, сложно для понимания, но этот код на чистом C, проще не куда.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 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ил
 Аватар для Mиxaил
530 / 435 / 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++

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

Или воспользуйтесь поиском по форуму:
Mиxaил
 Аватар для Mиxaил
530 / 435 / 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     Строки. ошиьки наборщиков текста
Ответ Создать тему
Опции темы

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