LINUX.ORG.RU

Аналог chomp в C/C++


0

0

Довольно часто в своих проектах появляется необходимость в данной функции:

void chomp (char *line) {
    char *temp = line;
    while (*temp != '\0') {
        if (*temp == 0x0A || *temp == 0x0D) {
            *temp = '\0';
            break;
        }
        temp++;
    }
}

может быть это как-то проще делается стандартными сишными функциями?
Или например для C++ как тоже самое сделать просто для класса string?

anonymous

Ответ на: комментарий от dilmah

>вместо 0x0A и 0x0D правильно использовать '\n' и '\r'

так к примеру в DOS (в win тоже самое)
'\n'  - это 0x0A + 0x0D
то есть возможна такая ситуация
если под win собрать эту функцию, то она не будет корректно обрабатывать тот случай, когда в конце строки только 0x0A

anonymous
()

по памяти :
/* длинна строки, без учёта завершающих пробелов */
size_t nonspacelen(char *str) {
 size_t size;
 size=0;
 for(char *c=str;*c;c++) {
  if (! isspace(*c)) size=c+1;
 }
 return size;
}
#define trimright(s) (s?(s)[nonspacelen(s)]=0:0)
для других целей заменить isspace на isblank
(see manpages for details)

anonymous
()

SORRY ! память кривовата ;-)
/* длинна строки, без учёта завершающих пробелов */
size_t nonspacelen(char *str) {
 size_t size;
 size_t index;
 index=size=0;
 for(char *c=str;*c;c++,index++) {
  if (! isspace(*c)) size=index+1;
 }
 return size;
}
#define trimright(s) (s?(s)[nonspacelen(s)]=0:0)

anonymous
()
Ответ на: комментарий от cvv

>а ты не путаеш "\n" with '\n'??????????

наверное путаю. Как-то не подумал об этом.

anonymous
()

Всем спасибо.

anonymous
()
Ответ на: комментарий от cvv

> так к примеру в DOS (в win тоже самое) >'\n' - это 0x0A + 0x0D

> а ты не путаеш "\n" with '\n'??????????

в дос "\n" и '\n' это НЕ 0x0A + 0x0D

\n превращается в 0x0A + 0x0D только при выводе в поток открытый без ключа binary.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

>> так к примеру в DOS (в win тоже самое) >'\n' - это 0x0A + 0x0D

>> а ты не путаеш "\n" with '\n'??????????

>в дос "\n" и '\n' это НЕ 0x0A + 0x0D

>\n превращается в 0x0A + 0x0D только при выводе в поток открытый без ключа binary.

похоже dilmah прав

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.