试题 基础练习 字符串对比
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
1:两个字符串长度不等。比如 Beijing 和 Hebei
2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
输入格式
包括两行,每行都是一个字符串
输出格式
仅有一个数字,表明这两个字符串的关系编号
**题解一:**建议逻辑结构强的人试一试,不调用字符串比对函数,来完成本题
#include<stdio.h>
#include<string.h>
int main(){
char a[20],b[20];
int i,j,m,n,k=0;
gets(a);
gets(b);
n=strlen(a); //得到a字符串的长度
m=strlen(b); //得到b字符串的长度
if(n!=m){
printf("1");
}else{
for(i=0;i<n,i<m;i++){
if(a[i]==b[i]){
k=2;
}else {
k=0;
break; //跳出for循环
}
}
if(k!=2){
for(i=0;i<n,i<m;i++){
if((a[i]+32==b[i])||(b[i]+32==a[i])||(a[i]==b[i])){
k=3;
}else{
k=4;
break;
}
}
}
if(k)
printf("%d",k);
}
return 0;
}
**题解二:**调用比对字符串函数strcmp()、strcasecmp()
#include<stdio.h>
#include<string.h>
int main(){
char a[10],b[10];
int i;
gets(a);
gets(b);
if(strlen(a)==strlen(b)){
if(strcmp(a,b)==0){
printf("2");
return 0;
}
if(strcasecmp(a,b)==0) {
printf("3");
return 0;
}
if(strcmp(a,b)!=0){
printf("4");
return 0;
}
}else{
printf("1");
}
return 0;
}
解释: 这儿讲解两个函数
1. strcmp 函数 是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
表头文件: #include <string.h>
语法: extern int strcmp(const char *s1,const char *s2);
规则:
当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。 [2]
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。
2. strcasecmp 用忽略大小写比较字符串.,通过strcasecmp函数可以指定每个字符串用于比较的字符数,strncasecmp用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异。
表头文件 #include <string.h>(不是C/C++的标准头文件,区别于string.h)
语法 int strcasecmp (const char *s1, const char *s2);
函数说明 strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。
返回值 若参数s1和s2字符串相等则返回0。s1大于s2则返回大于0 的值,s1 小于s2 则返回小于0的值。