改错题_101

1. 第7行,将if (b >= 'A'&&b <= 'Z') b += 'b' - 'A' 改成 if (b >= 'A'&&b <= 'Z') b += 'a' - 'A'

 

题解:这里通过将’a’ - ‘A’的差值作为把小写改变成大写的方法, 翻译成ASCII码就是用97 - 65, 再通过将字符变量b加上这个值, 将b变换成小写字母。

 

2. 第16行,将 equal(p, q) 改为 equal(*p, *q)

 

题解:因为函数equal的参数为(char, char),所以在调用的时候不能使用p, q这两个字符指针。

ps: 还可以将参数进行修改,不过那样对函数也要进行一定的修改,如下

int Equal(char* a, char* b)

{

    if (*a >= 'A'&&*a <= 'Z') *a += 'a' - 'A';

    if (*b >= 'A'&&*b <= 'Z') *b += 'a' - 'A';

    return *a == *b;

}

个人觉得还是第一种比较好。

 

3. 第21行, 将 return 0 改为 return NULL

 

题解:因为函数substr的返回值类型为char*,所以返回NULL

 

4. 28行,将if ((p = substr(str, s2))!= 0) 改为 if ((p = substr(str, s2)) == NULL)

 

题解:通过阅读函数substr可以知道,当未找到子串时,返回NULL,找到的时候返回s所指向的地址,所以应该在等于NULL是输出”找不到子串“。

 

5. 第31行,将 p - str 改成 (p - str) / sizeof(char) + 1

 

题解:因为指针移动不是单纯的在当前地址值上加上1,而是加上一个当前的数据类型的长度,所以求位置是p - str还需要除以sizeof(char),由于题目要求中字符串第一个字符为1,所以最后还需要加上一个1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值