我正在尝试编写一个函数,将所有空格(即多个空格、换行符、制表符或上述任何连续序列)转换为单个空格。
例如,以下输入:
"example\tinput\tstring"
"example\ninput\nstring"
"example \tinput \n string"
都会产生相同的输出: “示例输入字符串”
我目前有以下代码基于 Stack Overflow 上的类似问题(https://stackoverflow.com/a/1217750/6652030,第二个答案)。它可以正确处理多个空格的序列,但不会按预期用空格替换制表符和换行符。如果我传递前两个示例输入,我得到的字符串是“exampleinputstring”。对我哪里出错有任何想法吗?
void removeExtraWhitespace(char *src, char *dst) {
for (; *src; ++dst, ++src) {
*dst = *src;
if (*src == '\n' || *src == '\t') {
*src = ' ';
}
else if (isspace(*src)) {
while (!isspace(*(src + 1))) {
++src;
}
}
}
*dst = '\0';
}
最佳答案
您可以对您的代码进行如下修改:
void removeExtraWhitespace(char *dst, const char *src) {
for(; *src; ++dst, ++src) {
if (isspace(*src)) {
*dst = ' ';
while (isspace(*(src + 1))) {
++src;
}
} else {
*dst = *src;
}
}
*dst = '\0';
}
例如,
char dst[50];
$ removeExtraWhitespace(dst, "\t\t\texample\t\t\n input\nstring\n\n ");
$ printf("%s\n", dst);
example input string
关于c - 如何用 C 字符串中的单个空格替换空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42966864/