这个算法的思想是,用一个变量统计前面出现了多少个空格,把原字符串的第n+offset的值赋给新字符串的第n个字符。这样就能达成一次遍历就能在原字符串上修正的目的了。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *s=malloc(256);
char *p=s,offset=0;/*offset记录数据交换的间隔*/
printf("请输入一个字符串:\n");
fgets(s,256,stdin);
printf("去空格前:\n%s",s);
while(*p!='\0')
{
if(*p==' ')
offset++;
p++;
*(p-offset)=*p;
}
printf("去空格后:\n%s",s);
free(s);
return 0;
}
追问好复杂~
fgets(s,256,stdin);
free(s); 都看不懂~
追答fgets表示从一个流中读取数据。stdin则指出这个流是输入流(就是你的按键输入的信息)。256那个参数是限制读入字符数量,最多读到256个字符后就终止,防止溢出的。这个函数比scanf的优越性就是,它能够读入空格。
free(s)是释放s指向的内存,s这个指针指向了一个字符串,如果程序员没有用free命令释放这块动态分配的内存,那么会发生内存泄漏。记住一点就行了,用malloc和realloc分配的内存要在不用时手动释放。