c语言 字符串去掉空格

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void trimSpace(char *instr, char *outstr){
int i = 0;
for (i = 0; i < (int)strlen(instr); i++)
{

if ((int)(*(instr+i))==32)
{
continue;

}
else{
*(outstr + i) = *(instr + i);
}

printf("%c", *(outstr+i)); //这个位置可以打印出来去掉空格之后的字符串

}

*(outstr + i) = '\0';
printf("%s", *outstr); //这个位置再打印就是null了 求解为什么 感谢

}

void main(){
char *p1 = " abcdefgdddd ";
char p2[100] = {0};
trimSpace(p1,p2);
//printf("%s", p2);
getchar();
}

// 修改如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void trimSpace(char *instr, char *outstr){
int i = 0;
int j = 0; // 因为去掉空格后的字符串的字符个数和去掉空格之前不一样,需要额外增加一个变量用来标记下标。
for (i = 0; i < (int)strlen(instr); i++)
{
if ((int)(*(instr+i))==32)
{
continue;
}
else{
*(outstr + j) = *(instr + i);
j++;
}

printf("%c", *(outstr+i)); //这个位置可以打印出来去掉空格之后的字符串

}

*(outstr + j) = '\0';
printf("%s", *outstr); //这个位置再打印就是null了 求解为什么 感谢

}

void main(){
char *p1 = "   abcdefgdddd    ";
char p2[100] = {0};
trimSpace(p1,p2);
//printf("%s", p2);
getchar();
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-14
通过gets输入字符串后就开始遍历字符串,如果字符不是空格直接输出并向后遍历,如果是空格输出一个空格,并向后遍历直到不是空格为止,不作输出处理。
参考代码:
#include<stdio.h>
int main()
{
int i;
char a[100];
gets(a);
for(i=0;a[i]!='\0';){
if(a[i]==' '){//如果是空格输出一个空格,并向后遍历直到不是空格为止,中间不输出
printf(" ");
while(a[i]==' ') i++;
}
else{//如果字符不是空格直接输出并向后遍历
printf("%c",a[i]);
i++;
}
}
printf("\n");
return 0;
}
/*
输出:
I am a teacher
I am a teacher
*/
第2个回答  2014-06-02
#include <stdio.h>#include <string.h>#include <ctype.h>void func(char *str){ int i,j; char str2[81]; for(i=0,j=0;str[i]!='\0';i++){ if(str[i]==' '){ ; }else{ str2[j++]=str[i]; } } str2[j] = '\0'; strcpy(str,str2); return;}int main(void){ char str[81]; printf("input a string:\n"); gets(str); puts(str); func(str); printf("***str: %s\n",str); return 0;} 或者这样
#include <stdio.h>#include <string.h>#include <ctype.h>void func(char *str){ int i,j; for(i=0,j=0;str[i]!='\0';i++){ if(str[i]==' '){ ; }else{ str[j++]=str[i]; } } str[j] = '\0'; return;}int main(void){ char str[81]; printf("input a string:\n"); gets(str); puts(str); func(str); printf("***str: %s\n",str); return 0;}追问

只能用两个指针作为传递进修修改

相似回答