搜索换行符或CR / LF字符

时间:2012-01-05 07:46:17

标签: c

我正在搜索字符串,字符串可能包含换行符或CRLF。我增加指针以搜索每个字符。我已将十六进制转换为十进制。但是,由于我正在寻找一个单一的字符,我不确定这是最好的方法。

非常感谢任何建议,

   /*
      0x0a (ASCII newline)
      0x0d (ASCII carriage return)
      CRLF (0x0d0a)
    */

    while(*search != '\0') {
        /* Seach for a newline */
        if(*search == 10) {
            printf("\nnewline Found\n");
        }

        /* Search for a CRLF */
        if(*search == 3338) {
            printf("\nCRLF Found\n");
        }

        search++;
    }

我正在使用C89模式的gcc 4.6.2进行编译。

4 个答案:

答案 0 :(得分:4)

CRLF是两个字符:CR和LF。您需要单独匹配它们,而不是像3338一样匹配它们(我想:你从哪里获得这个数字?)另外,使用字符常量:'\0',{{1} },'\n',它会让你的代码更清晰。

'\r'

正如另一张海报建议的那样,您还可以使用/* 0x0a (ASCII newline) 0x0d (ASCII carriage return) CRLF (0x0d0a) */ while(*search != '\0') { /* Seach for a newline */ if(*search == '\n') { printf("\nnewline Found\n"); search++; } /* Search for a CR or a CRLF */ if(*search == '\r') { // OK, we found a CR, is it followed by a LF? if(*(search + 1) == '\n') { // Yes, it is, thus, it is a CRLF printf("\nCRLF Found\n"); search += 2; // Note the 2! CRLF is 2 characters! } else { // No, just a lonely CR, forever alone. printf("\nCarriage return found\n"); search++; } } } strchr函数,并从中获取最小的有效结果。 (这将是3行代码。)

答案 1 :(得分:2)

查找strchrstrstr函数。他们是为此而做的。

但是CRLF不是一个字符,而是两个字符。要找到它,请搜索'\ n'并检查前一个字符。

答案 2 :(得分:1)

您只需将代码修改为:

for(; *search != '\0'; search++) {
    /* Seach for a newline */
    if(*search == '\n') {
        printf("\nnewline Found\n");
    }
    /* Search for a CRLF */
    else if(*search == '\r' && *(search + 1) == '\n') {
        printf("\nCRLF Found\n");
        search++; /* search will be incremented twice (bit hacky?) */
    }
}

如果if不是(search + 1)*search语句中的短路会阻止'\r'被取消引用,这样就不会导致您超越*search的范围如果'0'原来是*search == 3338,则为字符串。

如果searchchar* / char[],则前一代码示例中的

char无效,因为 { {1}}只能表示256个不同的值,CRLF是2个字节的序列(2 char s)。

答案 3 :(得分:1)

我建议使用strstr()来使用strchr(),因为后者不是多字节字符保存(根据定义)。

另外,strspn()strcspn()这两种方法可以提供帮助。