c primer plus第11章课后题第9题:删除字符串中的空格。由此引申到gets函数的返回值问题。

文章提供了一个C语言函数,用于删除输入字符串中的空格。在循环中使用gets()函数获取用户输入,当输入为空行时结束程序。函数notNullString()通过动态内存分配创建新字符串,不包含空格。在主函数中,如果处理后的字符串长度为0,则退出程序。
摘要由CSDN通过智能技术生成

题目重述:

编写一个函数。其参数为一个字符串,函数删除字符串中的空格。在一个可以循环读取的程序中进行测试,直到用户输入空行。对于任何输入字符串,函数都应该适用并可以显示结果。

思路分析:

众所周知,对于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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值