时光给我倒流一下 2022-11-27 00:27 采纳率: 100%
浏览 32
已结题

c语言习题比较字符串不用strcmp函数

跟我预想的不一样 我不明白为啥我输个等长的并不相等的字符串他为啥会一直循环 而不会跳出;想不明白求解答

img

img


#include<stdio.h>
int main ()
{
    char str1[50],str2[50];
    
    int res=0;
        printf("字符串1\n");
        gets(str1);
        printf("字符串2\n");
        gets(str2);
        char *p1=str1,*p2=str2;//p1 p2 指向str1 和str2两个字符串的第一个字符 

    while(*p1!='\0'||*p2!='\0')
    {
        if(*p1>*p2) //如果p1指向当前字符大于p2所指向的字符 若p1指向b p2指向a此时 b大于a 
            { 
                res=*p1-*p2;//结果等于b-a=1 
                break; //跳出循环 
            }
        else if (*p2<*p1)        
            {
                res=*p1-*p2;
                break;
            }
        else//都不满足 
        {
        p1++;
        p2++;     //判断下一字符 
        }
    }
    if(*p1=='\0'&&*p2=='\0')//若p1 和p2 都指向'\0'说明俩字符串等长且相等 
        { 
            printf("两字符串相等");
            res=0;
        } 
    else if(*p1=='\0'&&*p2!='\0')//若p1指向‘\0’而p2指向不是‘\0’ 说明str2长度大于str1且在p1指向/0的位置前 
        {                                                                //两字符完全相等 
            res=-*p2;//res=0-p2指向的字符 
        }
    else if(*p1!='\0'&&*p2=='\0')
        res =*p1;
        printf("\n\n%d",res);                                 
               

    return 0;
}


  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-11-27 10:01
    关注

    修改如下,供参考:

    #include <stdio.h>
    int main ()
    {
        char str1[50],str2[50];
        int res=0;
        printf("字符串1\n");
        gets(str1);
        printf("字符串2\n");
        gets(str2);
        char *p1=str1,*p2=str2;//p1 p2 指向str1 和str2两个字符串的第一个字符
        while (*p1 == *p2 && *p1){
            p1++; p2++;
        }
        if (*p1 == '\0' && *p2 == '\0')
            res = 0;
        else
            res = *p1 - *p2;
        printf("%d",res);
    
    #if 0     //以下删除
        while(*p1!='\0'||*p2!='\0')
        {
            if(*p1>*p2) //如果p1指向当前字符大于p2所指向的字符 若p1指向b p2指向a此时 b大于a
                {
                    res=*p1-*p2;//结果等于b-a=1
                    break; //跳出循环
                }
            else if (*p2<*p1)
                {
                    res=*p1-*p2;
                    break;
                }
            else//都不满足
            {
            p1++;
            p2++;     //判断下一字符
            }
        }
        if(*p1=='\0'&&*p2=='\0')//若p1 和p2 都指向'\0'说明俩字符串等长且相等
            {
                printf("两字符串相等");
                res=0;
            } 
        else if(*p1=='\0'&&*p2!='\0')//若p1指向‘\0’而p2指向不是‘\0’ 说明str2长度大于str1且在p1指向/0的位置前
            {                                                                //两字符完全相等
                res=-*p2;//res=0-p2指向的字符 
            }
        else if(*p1!='\0'&&*p2=='\0')
            res =*p1;
            printf("\n\n%d",res);
    #endif
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 创建了问题 11月27日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改