Консультация № 163287
26.03.2009, 03:27
0.00 руб.
0 1 1
Здраствуйте уважаемые эксперты ! Помогите решить следущию программу...
Пусть задано некотрое слово. Начать просмотр этого слова слева направо до тех пор, пока не встретятся повтроряющиеся буквы.
Если такие буквы встретились, пропустить их и продолжить просмотрт с конца слова в обратном порядке (справо налево), пока снова ни встретится набор повторяющихся букв.
Если такой набор встретился, продолжить просмотр с того места, которое следует за первым набором повторяющихся букв и т.д.
"Протокол" просмотра строки вывести на экран; вместо последовательности повторяющихся букв выводить один символ подчеркивания.

Допустимые символы - прописные русские буквы.
Например
Исходное слово - БАННАЛЛИБ
Протокол просмотра - БА_БИ_А

Обсуждение

Неизвестный
27.03.2009, 19:19
общий
это ответ
Здравствуйте, Иван Горбинко!
Код компилирован в MS Visual Studio 2005.
Будут вопросы, задавайте в минифоруме.
Удачи.

Код:

#include <iostream>
#include <string>
#include <locale>

using namespace std;

int main()
{
locale::global(locale("rus_rus.866"));

wstring str_input, //Исходная строка
str_protocol; //Протокол просмотра

wcout << L"Введите строку:" << endl;
getline(wcin,str_input);

//Указатели на начало и конец строки
wchar_t *index_begin_1,
*index_begin_2,
*index_end_1,
*index_end_2;

index_begin_1 = index_begin_2 = &str_input[0];
index_end_1 = index_end_2 = &str_input[str_input.size()-1];

do{
index_begin_1++;

//Поиск группы одинаковых символов слева направо
while( *index_begin_2 != *index_begin_1 && index_begin_2 <= index_end_1 ){
str_protocol += *index_begin_2;
index_begin_2 = index_begin_1;
index_begin_1++;
}

//Пропуск одинаковых символов
if( *index_begin_1 == *index_begin_2 && index_begin_2 <= index_end_1 ){
str_protocol+=L'_';
do{
index_begin_1++;
} while ( *index_begin_1 == *index_begin_2 );
index_begin_2 = index_begin_1;
}

//Поиск группы одинаковых символов справа налево
index_end_1--;
while ( *index_end_1 != *index_end_2 && index_end_2 >= index_begin_1 ){
str_protocol += *index_end_2;
index_end_2 = index_end_1;
index_end_1--;
}

//Пропуск одинаковых символов
if( *index_end_1 == *index_end_2 && index_end_2 >= index_begin_1 ){
str_protocol+=L'_';
do{
index_end_1--;
} while ( *index_end_1 == *index_end_2);
index_end_2 = index_end_1;
}

}while( index_begin_1 <= index_end_1 );

wcout << str_protocol << endl << endl;

system("PAUSE");
return 0;
}


Пример решения:
Код:

Введите строку:
ПРППАВВКЛЛРСШ
ПР_ШСР_А_К

Для продолжения нажмите любую клавишу . . .
Форма ответа