Другие языки программирования и технологии

Ребят всем привет. Помогите пожалуйста. 3 день голову ломаю, заколебался уже!!! Вообщем, задача следующая.

Необходимо на языке программирования СИ написать программу, которая вставляет в строку пробелы перед и после дефиса. Но есть условие, что если при преобразовании строки получилось так : 1--2 то два дефиса стоять не могут (перед ними должен быть пробел, и причём только один.)
Т. е. При входной строке -1--2- должно получиться: - 1 - -2 -
Сделай проверку строки на подстроку (два дефиса). Отсюда и два условия обработки
Андрей Пишикин
Андрей Пишикин
3 052
Лучший ответ
Александр Мусинов а как пробелы между ними вставить?
Программа делает примерно то, что вам нужно

#include <stdio.h>
#defineBUF_SIZE4096

//Определение функций
//Преобразует ASCII строку, добавляя перед каждым знаком '-' пробел
//Если подряд идет два символа '-' пробел между ними не добавляется
voidmake_line( char* buf, size_t buf_size, char* incoming_str );

intmain( int argc, char* argv[] )
{
inti;
charbuf[ BUF_SIZE ];

if( argc > 1 )
{
for( i = 1; i < argc; i++ )
{
make_line( buf, BUF_SIZE, argv[i] );
printf( "'%s' => '%s'\n", argv[i], buf );
}
}
else
{
printf( "Использование: %s <строка> [строка] \n", argv[0] );
}
}
//-------------------------------------------------------------------
//Преобразует ASCII строку, добавляя перед каждым знаком '-' пробел
//Если подряд идет два символа '-' пробел между ними не добавляется
voidmake_line( char* buf, size_t buf_size, char* incoming_str )
{
size_ti = 0;
size_tmax_i;
char*ptr;
charlast_char = '\0';

ptr = incoming_str;// начнем с начала строки
max_i = buf_size - 1;// Нам нужно оставить один элемент под '\0'

while( *ptr && (i < max_i) )
{
//Нашли символ '-'?
if( *ptr == '-' )
{
if( last_char == '-' )
{
//Сохраним символ
buf[ i ] = *ptr;
}
else
{
//Добавим пробел
buf[ i ] = ' ';
i++;
//Сохраним символ
if( i < max_i )
{
buf[ i ] = *ptr;
}
else
{
fprintf(stderr, "Cтрока не влезает в буфер!");
break;
}
}
}
else
{
if( last_char == '-' )
{
buf[ i ] = ' ';
i++;
//Сохраним символ
if( i < max_i )
{
buf[ i ] = *ptr;
}
else
{
fprintf(stderr, "Cтрока не влезает в буфер!");
break;
}
}
else
{
buf[ i ] = *ptr;
}
}

//Сохраним последний обработанный символ
last_char = *ptr;
i++;
ptr++;
}
buf[ i ] = '\0';
}
//-------------------------------------------------------------------
Саша Суйков
Саша Суйков
9 624

Похожие вопросы