题目重述:
编写一个函数。其参数为一个字符串,函数删除字符串中的空格。在一个可以循环读取的程序中进行测试,直到用户输入空行。对于任何输入字符串,函数都应该适用并可以显示结果。
思路分析:
众所周知,对于scanf输入函数,想要终止输入的写法是:while(scanf(“%d”,x)!=EOF){,},这是因为,scanf函数的返回值是整数,EOF是在头文件stdio.h中定义好的一个常量,-1,代表文件的末尾。但是这一种判断方式对于gets()函数是不适用的。
gets()函数的返回值是字符串的地址,因此只能使用while(gets(test1)!=NULL),如果读取字符串失败,返回空指针,算法结束。
但是在日常测试中很难返回空指针,即使输入空白行,也不会退出程序。
因此增加一个判断条件,如果字符串长度小于等于=,退出程序。
代码:
#include <stdio.h>
#include "string.h"
#include "stdlib.h"
#define SIZE 30
char * notNullString(char * str1);
int main(int argc, const char * argv[]) {
char test1[SIZE];
char * test2;
int length = 0;
puts("input your string:");
while(gets(test1)!=NULL){
length = strlen(test1);
if(length > 0){
test2 = notNullString(test1);
puts("the cut string:");
puts(test2);
free(test2);
}else{
return 0;
}
}
return 0;
}
char * notNullString(char * str1)
{
char * str2 = (char *)malloc(SIZE*(sizeof(char)));
int i=0;
int j=0;
int length1 = strlen(str1);
for(i=0;i<length1;i++){
if(*(str1+i) != ' '){
*(str2+j) = *(str1+i);
j++;
}
}
*(str2+j) = '\0';
return str2;
}