在C中模仿Python的strip()函数

sud*_*rsh 5 c python string fgets

我最近在C中开始了一个小玩具项目,并且一直在试图模仿作为python字符串对象一部分的strip()功能的最佳方法.

读取fscanf或sscanf表示字符串被处理到遇到的第一个空格.

fgets也无济于事,因为我仍然有新的线条.我确实尝试了一个strchr()来搜索空格并将返回的指针设置为'\ 0',但这似乎不起作用.

Ale*_*lli 12

Python字符串的strip方法删除了尾随和前导空格.当处理C"字符串"(char数组,\ 0终止)时,问题的两半非常不同.

对于尾随空格:将指针(或等效索引)设置为现有尾部\ 0.继续递减指针,直到它碰到字符串的开头或任何非白色字符; 在此终止 - 向后扫描点之后将\ 0设置为右.

对于前导空格:将指针(或等效索引)设置为字符串的开头; 继续递增指针,直到它碰到非白色字符(可能是尾随\ 0); memmove其余的字符串,以便第一个非白色字符串到达​​字符串的开头(对于后面的所有内容,类似).


Mar*_*ark 10

strip()或trim()函数没有标准的C实现.也就是说,这是Linux内核中包含的内容:

char *strstrip(char *s)
{
        size_t size;
        char *end;

        size = strlen(s);

        if (!size)
                return s;

        end = s + size - 1;
        while (end >= s && isspace(*end))
                end--;
        *(end + 1) = '\0';

        while (*s && isspace(*s))
                s++;

        return s;
}
Run Code Online (Sandbox Code Playgroud)

  • 当然,要使用此处提供的代码,项目必须是GPLv2,不能更晚,因为这是Linux内核使用的. (11认同)