Дан файл, содержащий текст на английском языке. В предложениях некоторые из слов записаны подряд несколько раз (Предложение заканчивается точкой или восклицательным знаком) . Получить в новом файле отредактированный текст, в котором удалены повторные вхождения слов в предложение.
Нужна простая программа, без ООП.. .
Конкретно не могу разобраться как:
1) Считать по словам, сравнить соседние и удалить повтор.. .
Просто проболел учебу, и не могу теперь сам разобраться, помогите пожалуйста)
Другие языки программирования и технологии
Задачка по С++ в BORLARDC
используем динамический стринглист для загрузки текста из файла, а далее используем в цикле свойства конкантенации строк и подсвойство сабстринг для определения повторяющихся слов, вот цитата из одной из книг Архангельского:
"Теперь попробуем повторить рассмотренный в предыдущем разделе поиск
в строке S1 фрагмента, заданного строкой S2, и замену его текстом строки S3.
Код, осуществляющий эти операции, может иметь вид:
AnsiString SI, S2, S3;
// операторы занесения текста в SI, S2, S3
int i = SI.Pos (S2);
if (i)
Labell->Caption = SI . Substring (1, i-1) -t- S3 +
SI.SubString(1+S2.Length(),255);
else Labell->Caption = "Текст не найден";
В этом коде использован ряд функций-элементов класса AnsiString: Pos,
Substring, Length. Обратите внимание на то, что доступ к ним осуществляется
операцией точка (.), вместо более привычной в C++Builder операции доступа к ме-
тодам компонентов стрелка (—>). Дело в том, что к методам компонентов доступ
осуществляется через указатель на объект, а в данном случае к методам Ansi-
String доступ осуществляется через сами объекты — строки.
Первый выполняемый оператор приведенного кода использует функцию Pos.
Эта функция ищет в строке, к которой она применена (в нашем случае в S1), первое
вхождение подстроки, заданной ее параметром (в нашем случае S2). Если поиск ус-
пешный, функция возвращает индекс первого символа найденного вхождения под-
строки. Индексы начинаются с 1. Если подстрока не найдена, возвращается 0.
Следующий оператор с помощью структуры if...else проверяет, не равно ли
нулю (false) возвращенное функцией Роз значение. Если не равно, то производится
формирование строки с заменой найденной подстроки. Строка формируется склеи-
ванием трех строк: начальной части строки S1, расположенной до найденного вхож-
дения подстроки, строки S3, заменяющей найденное вхождение, и заключительной
части строки S1, расположенной после найденного вхождения. Для получения
фрагментов строки S1 использована функция Substring. Эта функция возвращает
подстроку, начинающуюся с символа в позиции, заданной первым параметром
функции, и содержащую число символов, не превышающее значение, заданное вто-
рым параметром функции. Таким образом, выражение Sl.SubString(l, i — 1) воз-
вращает подстроку строки S1, начинающуюся с первого символа и содержащую
i - 1 символов, т. е. часть строки S1, расположенную до найденного вхождения под-
строки S2. Аналогично, выражение Sl.SubString(i + S2.Length(), 255) возвращает
подстроку строки S1, расположенную после найденного вхождения подстроки S2.
При этом для определения начала этой подстроки использована функция Length,
возвращающая число символов в строке (в нашем случае — в строке S2, содержа-
щей заменяемый фрагмент) . В приведенном выражении в качестве второго парамет-
ра функции Substring задано число 255, которое, как ожидается, превышает длину
подстроки. В действительности будет возвращено менее 255 символов, столько,
сколько имеется до завершающего S1 нулевого символа. "
"Теперь попробуем повторить рассмотренный в предыдущем разделе поиск
в строке S1 фрагмента, заданного строкой S2, и замену его текстом строки S3.
Код, осуществляющий эти операции, может иметь вид:
AnsiString SI, S2, S3;
// операторы занесения текста в SI, S2, S3
int i = SI.Pos (S2);
if (i)
Labell->Caption = SI . Substring (1, i-1) -t- S3 +
SI.SubString(1+S2.Length(),255);
else Labell->Caption = "Текст не найден";
В этом коде использован ряд функций-элементов класса AnsiString: Pos,
Substring, Length. Обратите внимание на то, что доступ к ним осуществляется
операцией точка (.), вместо более привычной в C++Builder операции доступа к ме-
тодам компонентов стрелка (—>). Дело в том, что к методам компонентов доступ
осуществляется через указатель на объект, а в данном случае к методам Ansi-
String доступ осуществляется через сами объекты — строки.
Первый выполняемый оператор приведенного кода использует функцию Pos.
Эта функция ищет в строке, к которой она применена (в нашем случае в S1), первое
вхождение подстроки, заданной ее параметром (в нашем случае S2). Если поиск ус-
пешный, функция возвращает индекс первого символа найденного вхождения под-
строки. Индексы начинаются с 1. Если подстрока не найдена, возвращается 0.
Следующий оператор с помощью структуры if...else проверяет, не равно ли
нулю (false) возвращенное функцией Роз значение. Если не равно, то производится
формирование строки с заменой найденной подстроки. Строка формируется склеи-
ванием трех строк: начальной части строки S1, расположенной до найденного вхож-
дения подстроки, строки S3, заменяющей найденное вхождение, и заключительной
части строки S1, расположенной после найденного вхождения. Для получения
фрагментов строки S1 использована функция Substring. Эта функция возвращает
подстроку, начинающуюся с символа в позиции, заданной первым параметром
функции, и содержащую число символов, не превышающее значение, заданное вто-
рым параметром функции. Таким образом, выражение Sl.SubString(l, i — 1) воз-
вращает подстроку строки S1, начинающуюся с первого символа и содержащую
i - 1 символов, т. е. часть строки S1, расположенную до найденного вхождения под-
строки S2. Аналогично, выражение Sl.SubString(i + S2.Length(), 255) возвращает
подстроку строки S1, расположенную после найденного вхождения подстроки S2.
При этом для определения начала этой подстроки использована функция Length,
возвращающая число символов в строке (в нашем случае — в строке S2, содержа-
щей заменяемый фрагмент) . В приведенном выражении в качестве второго парамет-
ра функции Substring задано число 255, которое, как ожидается, превышает длину
подстроки. В действительности будет возвращено менее 255 символов, столько,
сколько имеется до завершающего S1 нулевого символа. "
Похожие вопросы
- Помогите решить задачку простенькую.
- задачки на сообразительность. 3 лампочки
- Придумайте задачку на массив в delphi (pascal)
- Можете решить маленькую HTML задачку
- Кто разбирается в программировании? помогите решить задачку!
- задачка на С# или С++
- Паскаль! Помогите пожалуйста разобраться в задачке.
- Задачка по Паскалю.
- Задачка в Паскале
- Помогите решить две, задачки по С++!