Замена нескольких пробелов и табуляций одни пробелом
/**
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
*/
.c.geshi_code {font-family:monospace;}
.c.geshi_code .imp {font-weight: bold; color: red;}
.c.geshi_code .kw1 {color: #b1b100;}
.c.geshi_code .kw2 {color: #000000; font-weight: bold;}
.c.geshi_code .kw3 {color: #000066;}
.c.geshi_code .kw4 {color: #993333;}
.c.geshi_code .co1 {color: #666666; font-style: italic;}
.c.geshi_code .co2 {color: #339933;}
.c.geshi_code .coMULTI {color: #808080; font-style: italic;}
.c.geshi_code .es0 {color: #000099; font-weight: bold;}
.c.geshi_code .es1 {color: #000099; font-weight: bold;}
.c.geshi_code .es2 {color: #660099; font-weight: bold;}
.c.geshi_code .es3 {color: #660099; font-weight: bold;}
.c.geshi_code .es4 {color: #660099; font-weight: bold;}
.c.geshi_code .es5 {color: #006699; font-weight: bold;}
.c.geshi_code .br0 {color: #009900;}
.c.geshi_code .sy0 {color: #339933;}
.c.geshi_code .st0 {color: #ff0000;}
.c.geshi_code .nu0 {color: #0000dd;}
.c.geshi_code .nu6 {color: #208080;}
.c.geshi_code .nu8 {color: #208080;}
.c.geshi_code .nu12 {color: #208080;}
.c.geshi_code .nu16 {color:#800080;}
.c.geshi_code .nu17 {color:#800080;}
.c.geshi_code .nu18 {color:#800080;}
.c.geshi_code .nu19 {color:#800080;}
.c.geshi_code .me1 {color: #202020;}
.c.geshi_code .me2 {color: #202020;}
.c.geshi_code span.xtra { display:block; }
Здравствуйте.
Суть проста - нужно удалять все подрядстоящие комбинации из пробелов и табуляций и заменять их на один пробел.
Да, если кто-то узнал, это онда из самых начальных задач из Кернигана и Ритчи, но вот меня на ней заклинило.
И, если можно, много n тоже заменить на один.
Спасибо.
Здравствуйте.
Суть проста - нужно удалять все подрядстоящие комбинации из пробелов и табуляций и заменять их на один пробел.
Да, если кто-то узнал, это онда из самых начальных задач из Кернигана и Ритчи, но вот меня на ней заклинило.
И, если можно, много n тоже заменить на один.
Спасибо.
1 ответов
Исходя из вашего описания задания, код может выглядеть как-то так (подряд идущие переводы строк я заменял на 1 перенос):
char text[] = "some text\t\t more text \n \t op op \n\n\n\nend.";
int length = strlen(text);
printf("Old text:\n%s\n", text);
int k = 1;
for(int i=1; i<length; i++)
{
//если встречаем перевод строки
if(text[i] == '\n')
{
//проверяем, что перед этим у нас не было перевода строки
if(text[k-1] != '\n')
{
//и только тогда пишем перевод строки
text[k] = '\n';
k++;
}
}
else
{
//если встречаем пробел или таб
if(text[i] == ' ' || text[i] == '\t')
{
//проверяем, что перед этим у нас не было пробела
if(text[k-1] != ' ')
{
//и только тогда пишем пробел
text[k] = ' ';
k++;
}
}
else
{
//сюда попадаем, когда у нас символ не является пробелом, табом или переносом строки
text[k] = text[i];
k++;
}
}
}
//не забываем поставить новый конец строки
text[k] = '\0';
printf("New text:\n%s\n", text);
Не знаю, нужно ли было обходиться без лишних переменных, я решил обойтись :Р