有没有办法在不使用外部库的情况下删除 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 库,所以我会假设您也没有办法动态分配内存(除非您已经编写了自己的分配器)。
因此,您需要就地修改字符串。
为此,您需要执行以下操作:
计算字符串开头的space个数
这是一个简单的 for
循环。
计算字符串末尾space个数
这也是一个简单的 for
循环,但是 运行 向后。
通过从字符串长度中减去 space 的量来计算干净字符串的长度。
将干净的字符串移到数组的开头,并在干净的字符串长度处放置一个空字符终止符。
这也是一个简单的 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=]';
}
请注意,我没有编译和测试这段代码,因为到我这样做时您的问题可能已经结束。
此外,如果您了解总体思路,您应该能够修复其中的任何错误。
我最近一直在尝试用 C 语言制作一个 OS。 OSshell需要从字符串" ADD "
中得到字符串"ADD"
。我需要去掉开头和结尾的空格才能自己获取命令。我尝试了其他使用标准库的方法,所以我不能使用。谁能帮我 trim 没有标准库 的字符串开头和结尾的空格? (编译器是 GCC)
类似于:
char* text = " ADD ";
char* newtext = trim(text);
是的,有。
由于您正在尝试编写一个 OS,或者更具体地说是一个能够启动和显示 shell 的二进制文件,并且您声明您不能使用标准 C 库,所以我会假设您也没有办法动态分配内存(除非您已经编写了自己的分配器)。
因此,您需要就地修改字符串。
为此,您需要执行以下操作:
计算字符串开头的space个数
这是一个简单的for
循环。计算字符串末尾space个数
这也是一个简单的for
循环,但是 运行 向后。通过从字符串长度中减去 space 的量来计算干净字符串的长度。
将干净的字符串移到数组的开头,并在干净的字符串长度处放置一个空字符终止符。
这也是一个简单的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=]';
}
请注意,我没有编译和测试这段代码,因为到我这样做时您的问题可能已经结束。
此外,如果您了解总体思路,您应该能够修复其中的任何错误。