有没有办法在不使用外部库的情况下删除 C 中字符串的所有前导和尾随空格?

Is there a way to remove all leading and trailing whitespaces of a string in C without the use of external librarys?

我最近一直在尝试用 C 语言制作一个 OS。 OSshell需要从字符串" ADD "中得到字符串"ADD"。我需要去掉开头和结尾的空格才能自己获取命令。我尝试了其他使用标准库的方法,所以我不能使用。谁能帮我 trim 没有标准库 的字符串开头和结尾的空格? (编译器是 GCC)

类似于:

char* text = "     ADD     ";
char* newtext = trim(text);

是的,有。

由于您正在尝试编写一个 OS,或者更具体地说是一个能够启动和显示 shell 的二进制文件,并且您声明您不能使用标准 C 库,所以我会假设您也没有办法动态分配内存(除非您已经编写了自己的分配器)。

因此,您需要就地修改字符串。

为此,您需要执行以下操作:

  1. 计算字符串开头的space个数
    这是一个简单的 for 循环。

  2. 计算字符串末尾space个数
    这也是一个简单的 for 循环,但是 运行 向后。

  3. 通过从字符串长度中减去 space 的量来计算干净字符串的长度。

  4. 将干净的字符串移到数组的开头,并在干净的字符串长度处放置一个空字符终止符。
    这也是一个简单的 for 循环。

综上所述,这是一个适合您的功能:

void strip_in_place(char *string, int length) {
    int prefix_spaces = 0;
    int postfix_spaces = 0;

    int index = 0;

    //find spaces at the beginning:
    while(index < length && string[index] == ' ') {
        prefix_spaces++;
        index++;
    }

    index = length - 1;

    //find spaces at the end:
    while(index > 0 && string[index] == ' ') {
        postfix_spaces++;
        index--;
    }

    int clean_length = length - (prefix_spaces + postfix_spaces);

    //move the string to erase spaces at the beginning
    for (index = 0; index < clean_length; index++) {
        string[index] = string[index + prefix_spaces];
    }

    //terminate to delete spaces at the end
    string[clean_length] = '[=10=]';
}

请注意,我没有编译和测试这段代码,因为到我这样做时您的问题可能已经结束。

此外,如果您了解总体思路,您应该能够修复其中的任何错误。