题目:
编写一个函数,从字符串中去除多余的空格,当发现字符串中有一个或多个连续的空格组成,就把它们改为单个空格。
解题思路:
其中的难点在于当遇到多个连续的空格的时候如何才能做到只保留一个空格。解法是用两个判断语句,当读到空格的时候就开始判断,如果下一个是字符就打印空格,如果不是就进入下一层代码块。在下一层代码块中循环判断从当前字符到结尾的空格数量,一旦遇到字符就跳出循环,如果是空格就让变量a加1,最后让i跑到下一个字符的前面空格,打印这个空格,然后i加1再进入下一个while判断。
遇到的问题:
再执行完一个while循环后一定要判断i指针的位置,一开始忘记加1,浪费了好多时间来debug
代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void debank(char string[]);
int main() {
/*去除一个字符串内多余的字符*/
char word[50];
gets_s(word);
debank(word);
}
void debank(char string[]) {
int len = strlen(string);
int i=0;
while (i<len)
{
/*如果不为空格就打印出来*/
if (string[i] != ' ') {
printf("%c", string[i]);
i = i + 1;
}
/*如果是空格*/
else
{
/*如果下一个字符不是空格*/
if (string[i+1]!=' ')
{
i = i;
printf("%c", string[i]);
}
/*在一个已经是空格的情况下,如果下一个字符还是空格*/
else
{
int a = 0;
for (int j = i+1; j < len - 1; j++) {
/*如果是空格就a+1*/
if (string[j] == ' ')
{
a = a + 1;
}
/*如果不是空格就跳出循环*/
else
break;
}
/*此时i跑到了最近一个不是空格的数的前面*/
i = i + a;
printf("%c", string[i]);
}
i = i + 1;
}
}
printf("\n");
}