字符串处理函数的问题
课后作业第4题,https://fishc.com.cn/forum.php?mod=viewthread&tid=70626&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570原文是:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "love";
char str2[] = "FishC";
if (strlen(str1) - strlen(str2) < 0)
{
printf("字符串"%s"比字符串"%s"短!\n", str1, str2);
}
else
{
printf("字符串"%s"比字符串"%s"长!\n", str1, str2);
}
return 0;
}
小甲鱼的做法是:所以 if (strlen(str1) - strlen(str2) < 0) 应该写成 if (strlen(str1) < strlen(str2))。
我改成< 0结果还是会报错
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "love";
char str2[] = "FishC";
if (strlen(str1) - strlen(str2))
{
printf("字符串"%s"比字符串"%s"短!\n", str1, str2);
}
else
{
printf("字符串"%s"比字符串"%s"长!\n", str1, str2);
}
return 0;
}
我改成这样的话的话就不会报错答案也是对的
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "love";
char str2[] = "FishC";
if (strlen(str1) - strlen(str2) < 0)
{
printf("字符串%s比字符串%s短!\n", str1, str2);//把原文多余的"删掉,下面也是这样
}
else
{
printf("字符串%s比字符串%s长!\n", str1, str2);
}
return 0;
}
而且我把多余的“删掉,在把< 0删掉,结果就是:字符串love比字符串FishC短!
为什么{:10_277:} 没看懂你想问啥,你想说哪段代码是错的,哪段是对的?
你最后说把<0删掉,可最后一段代码还是
if (strlen(str1) - strlen(str2) < 0) 风车呼呼呼 发表于 2022-4-24 18:27
没看懂你想问啥,你想说哪段代码是错的,哪段是对的?
你最后说把
我按照小甲鱼的方法来,会报错;按照我自己方法来不会报错,在我自己的解决方法的基础上加上小甲鱼的方法,会报错 单字轩 发表于 2022-4-24 18:31
我按照小甲鱼的方法来,会报错;按照我自己方法来不会报错,在我自己的解决方法的基础上加上小甲鱼的方法 ...
上面哪段代码是你自己的方法不会报错的,哪段是会报错的?
你代码顺序是不是放错了,先说改成<0会报错,放的却是没有<0的版本。又说删掉<0,接的又是一段有<0的代码{:10_284:} 风车呼呼呼 发表于 2022-4-24 18:40
上面哪段代码是你自己的方法不会报错的,哪段是会报错的?
你代码顺序是不是放错了,先说改成
第一段是原文,第二段是我自己的方法,第三段是我自己的方法加上小甲鱼的方法 printf("字符串"%s"比字符串"%s"长!\n", str1, str2);这个%s怎么在字符串外,这样肯定报错。 无 第二段代码打错了,应该是if (strlen(str1) < strlen(str2)),但是这样还是会错 zzxhh628 发表于 2022-4-24 18:56
printf("字符串"%s"比字符串"%s"长!\n", str1, str2);这个%s怎么在字符串外,这样肯定报错。
我改了,把”删掉,在把if (strlen(str1) - strlen(str2) < 0) 应该写成 if (strlen(str1) < strlen(str2)),还是错 本帖最后由 zzxhh628 于 2022-4-24 19:08 编辑
用strcmp,根据返回值就可以判断哪个长了。 单字轩 发表于 2022-4-24 19:03
我改了,把”删掉,在把if (strlen(str1) - strlen(str2) < 0) 应该写成 if (strlen(str1) < strlen(str2 ...
用 if (strlen(str1) < strlen(str2))运行没问题,你检查一下有没有其他地方又错了 zzxhh628 发表于 2022-4-24 19:06
用strcmp,根据返回值就可以判断哪个长了。
strlen改成strcmp吗 zzxhh628 发表于 2022-4-24 19:06
用strcmp,根据返回值就可以判断哪个长了。
strcmp在这里是没用的,它比较的是每个字符是否相同,要说比较字符串长短的话,恐怕只有一个字符串是另一个字符串的子串这一种情况才能得出谁长谁短 你试试先把strlen的值存到变量里,再进行判断。 你自己的方法也是错的,你可以试试把str1和str2位置调换一下,打印的必然还是if里面的语句,而不会是else里的。
strlen返回的是无符号数,根本不存在负数一说,所以原文去和0比较才是错的
你改成strlen(str1) - strlen(str2),两个无符号数做运算,不管怎么样,除非两者相同能得到0,否则还是一个无符号数,所以你这样的判断条件势必会让if获得的参数为“真”,输出的一定是if里的语句,只不过这里正巧和正确答案相同罢了 风车呼呼呼 发表于 2022-4-24 19:23
你自己的方法也是错的,你可以试试把str1和str2位置调换一下,打印的必然还是if里面的语句,而不会是else里 ...
确实,我没考虑到返回值。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "love";
char str2[] = "FishC";
if(strlen(str1)<strlen(str2))
{
printf("字符串%s比字符串%s短!\n", str1, str2);
}
else
{
printf("字符串%s比字符串%s长!\n", str1, str2);
}
return 0;
}
改成这样吧。
1. strlen()函数原型:unsigned int strlen (const char *)
2. 无符号整型之间作减法,结果还是无符号整型
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "love";
char str2[] = "FishC";
printf ("%u\n", strlen(str1) - strlen(str2));//strlen()函数返回值unsigned int,无符号整型减法后还是无符号整型,打印出来
if ((int)(strlen(str1) - strlen(str2)) < 0)
printf("字符串%s比字符串%s短!\n", str1, str2);
else
printf("字符串%s比字符串%s长!\n", str1, str2);
return 0;
}
验证结果:
4294967295
字符串love比字符串FishC短!
页:
[1]