一、题目要求
编写函数,要求去掉字符串中的所有空格
二、问题分析
根据题目要求,首先我们应该清楚这个题可以有好几种方法来解决,最先应该想到用数组。
方法(1):
定义一个指针遍历整个字符串,若该指针遍历到的字符不是空格的话,就将该字符放到一个临时的数组里,知道遇到'\0'为止,那么这个临时的数组中存放的就是去掉所有空格的字符串,然后再将临时的数组拷贝回原字符串数组。函数代码如下所示:
#include<stdio.h>
//删除字符串中的空格
char *delete_space(char *str)
{
char *p = str; //遍历字符串的指针
char tmp[257] = "";//创建临时数组
char *s = tmp;
while(*p!=0)
{
if(*p!=' ')
{
*s = *p;
s++;
}
p++;
}
*s = 0;//添加结束标志
strcpy(str,tmp);//将其去掉空格的临时数组拷回原字符串数组
return str;
}
方法(2):
从字符串开头开始找,找到空格就将后面的字符向前逐个移动,直到字符串结束为止。代码如下:
#include<stdio.h>
char *delete_space(char *str)
{
char *p=str;
while(*p!=0) //没有结束,循环
{
if(*p==' ') //遇到空格处理
{
char *q=p;//从空格处开始
while(*q!=0) //直到末尾的所有字符
{
*q=*(q+1); //逐次前移
q++; //每移一个字符,指针加1,准备移下一个字符
}
}
else //当前字符不是空格
{
p++; //指针后移,指向待检查的新字符
}
}
return str;
}
int main()
{
char str[] = "hello wor l d ";
printf("%s\n",delete_space(str));
return 0;
}
还有多种方法,这里就介绍最常见的两种,比较简单,都是简单易懂的。
三、总结
这个问题是比较简单的,虽然简单,但是不一样的方法效率都不同。学习编程还是要从基础做好。欢迎大家批评建议。