C编程题4 - 字符串对比

 616620131   2018-08-03 11:56   320 人阅读  0 条评论

题目描述

给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 

1:两个字符串长度不等。比如  Beijing  和  Hebei 

2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如  Beijing  和  Beijing 

3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如  beijing  和  BEIjing 

4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如  Beijing  和  Nanjing 

编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。

输入

包括两行,每行都是一个字符串 

输出

仅有一个数字,表明这两个字符串的关系编号 

样例输入

BEIjing 
beiJing

样例输出

3

参考答案

解题思路:
方法一,串长不等,直接输出类别为1;再用字符串比较函数strcmp,若两串相等就输出类别为2,若不等,就将两串内的字符改变成小写字母,再用strcmp比较,若相等,就输出类别为3,若仍然不等,类别为4。

方法二,当串长相等,先设置类别为2,假设两串相等,在随后搜寻串内字符过程中,若发现对应字符不等,再假设当大小写无关时,两串相等,设置类别为3,但是随后判断两串中对应字符的距离:若不等于32,两串显然不等,设置类别为4,并停止搜寻随后的字符。
注意事项:
用gets(a)、gets(b)无法正常获取输入,只能改用scanf("%s%s",&a,&b)。(这里a,b是两个之间可以不换行的字符串)


方法一

#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
    char a[11],b[11];
    int la,lb,i;
    scanf("%s%s",a,b);
    la=strlen(a);
    lb=strlen(b);
    if(la!=lb) printf("1\n");//串长不等
    else{
        if(!strcmp(a,b)) printf("2\n");//两串相等
        else{
            for(i=0;i<la;i++){
                a[i]=tolower(a[i]);
                b[i]=tolower(b[i]);
            }//串内字符转换成小写
            if(!strcmp(a,b)) printf("3\n");//小写串相等
            else printf("4\n");//两串不等
        }
    }
    return 0;
}

方法二

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
    int la,lb,i,f;
    char a[11],b[11];
    scanf("%s%s",a,b);
    la=strlen(a);
    lb=strlen(b);
    if(la!=lb) printf("1");//串长不等
    else{//假设两串相等
        for(f=2,i=0;i<la;i++){
            if(a[i]!=b[i]){//若对应字符不等
                f=3;//假设当大小写无关时两串相等
                if(32!=abs(a[i]-b[i])){//若对应两字符距离不等于32
                    f=4;//两串一定不等
                    break;
                }
            }
        }
        printf("%d",f);
    }
    return 0;
}


本文由作者整理

参考资料:http://www.dotcpp.com/oj/problemset.php

本文地址:http://blog.xiaoruizd.com/post/22.html
版权声明:本文为原创文章,版权归 616620131 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?