Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Убрать пробелы


Автор: admsasha 18.3.2005, 13:55
Как убрать пробелы в слове ?, если можно, то включая "\0", можно конечно ручками, но может функция есть готовая ?

Автор: sergejzr 18.3.2005, 15:16
\0 убирать нельзя! Это сигнализатор окончания сроки smile

А функции нет конечно.
Вот так шна может выглядеть (код не проверен).

Код

void removeWhitespaces(const char* stroka, char* result)
{
 for( ; *stroka; stroka++, result++ )
  {
    if(*stroka!=' ')
      *result=*stroka;
  }
  *result=0;

}

Автор: admsasha 18.3.2005, 16:03
неа не работает код.

Код

int main(){
    char strqq[1024];
    char strqq2[1024];
    strcpy(strqq,"   fddf ffd df fdfddfdf     ");
    removeWhitespaces(strqq,strqq2);
    printf("[%s]\n",strqq);
    printf("[%s]\n",strqq2);
    return 0;
}


Цитата

[  fddf ffd df fdfddfdf    ]
[$]


Автор: maxim1000 18.3.2005, 16:19
Цитата
void removeWhitespaces(const char* stroka, char* result)
{
for( ; *stroka; stroka++, result++ )
  {
    if(*stroka!=' ')
      *result=*stroka;
  }
  *result=0;

}

нее
так на тех местах, где были пробелы в исходной строке, будет мусор в результате...
Код

void removeWhitespaces(char *source,char *result)
{
  while(true)
  {
    if(*source!='-')
      *(result++)=*source;
    if(*source==0)
      break;
    source++;
  }
}

Добавлено @ 16:20
упс...а почему while не подсвечивается?..

Автор: sergejzr 18.3.2005, 16:23
Там лишний перепрыг smile

Так верно. (на этот раз даже компилил smile )
Код

#include "stdio.h"
#include "string.h"
void removeWhitespaces(const char* stroka, char* result)
{
 for( ; *stroka; stroka++)
     if(*stroka!=' ')
      *(result++)=*stroka;

  *result=0;
}
int main(){
    char strqq[1024];
    char strqq2[1024];
    strcpy(strqq,"   fddf ffd df fdfddfdf     ");
    removeWhitespaces(strqq,strqq2);
    printf("[%s]\n",strqq);
    printf("[%s]\n",strqq2);
    return 0;
}

Автор: versus 20.3.2005, 01:36
на вайтспейсы лучше тестировать стандартной функцией isblank
дело в том что вайтспейсы это не только пробелы. самый простой пример -- табуляция
isblank как раз учитывает все возможные виды вайтспесов: \s \t \r и еще чего-то там.

Автор: sergejzr 21.3.2005, 02:14
versus Да, согласен, если речь идёт о "свободном тексте".
если же файл имеет формат "через whitespace", то лучше наверное проверять только на неё из за быстродействия smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)