【发布时间】:2016-08-15 14:19:51
【问题描述】:
我试图创建一个 C 函数,它可以从字符串中删除所有不必要的空格。举个例子:
Hi my name is Leon .
函数调用后,它应该如下所示:
Hi my name is Leon.
但是我的程序总是在最后一个单词后面留一个空格,所以看起来是这样的:
Hi my name is Leon .
关于如何解决这个问题的任何想法? 代码如下:
char *DeleteSpaces(char *str) {
int blank = 1;
char *poc, *start = str, *q;
q = str;
while (*q == ' ') q++;
poc = str;
while (*poc++ = *q++);
while (*str != '\0') {
q = str;
if (*str == ' ') {
if ((blank >= 1 && *(str-1) == ' ')) {
poc = str;
while (*poc == ' ') {
poc++;
}
q = str;
while(*poc != '\0') {
*q++ = *poc++;
}
*q = '\0';
blank = 0;
}
blank++;
}
else if (blank == 1)
blank = 0;
str++;
}
str--;
if (str == ' ') *str = '\0';
return start;
}
【问题讨论】:
-
您显示的代码有什么问题?你有构建错误吗?运行时崩溃?出乎意料的结果?请详细说明。另外,你如何调用这个函数?你传递什么作为论点?请read about how to ask good questions,并学习如何创建Minimal, Complete, and Verifiable Example。
-
您将一系列空间压缩成一个空间。如果要在
.之前完全删除空格,则需要添加逻辑。 -
请研究一下 cmets 的用途。提示:你的代码很难理解,不仅是因为格式,还因为缺少解释。
-
你没有考虑标点符号;您需要一些额外的逻辑来删除字母和句点(或逗号、分号或问号等)之间的 all 空格。此外,您的代码似乎有点复杂。
-
发布“为什么我的代码不起作用”问题时,请发布干净编译和运行的代码,即包括调用包含问题的函数的
main()函数。包括所需的#include语句,以便可以编译代码。