基础练习 字符串对比

问题描述
  给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
  1:两个字符串长度不等。比如 Beijing 和 Hebei
  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
  4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
  编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
输入格式
  包括两行,每行都是一个字符串
输出格式
  仅有一个数字,表明这两个字符串的关系编号
样例输入
BEIjing
beiJing 
样例输出
3
 1 /*
 2 2020年3月25日15:22:12
 3 蓝桥杯习题
 4 问题描述
 5   给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
 6   1:两个字符串长度不等。比如 Beijing 和 Hebei
 7   2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
 8   3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
 9   4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
10   编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
11 输入格式
12   包括两行,每行都是一个字符串
13 输出格式
14   仅有一个数字,表明这两个字符串的关系编号
15 样例输入
16 BEIjing
17 beiJing 
18 样例输出
19 3 
20 */
21 
22 /*
23 分析:
24 长度是否相等:
25     1.不等    ———————————— 情况1 
26     2.相等    
27         1)对应字符完全一致————— 情况2 
28         2)不区分大小写
29             a.完全一致 ——————— 情况3 
30             b.不一致  ————————情况4 
31 */
32 
33 #include<iostream>
34 #include<string>
35 #include<cstring>
36 #include<ctype.h>
37 using namespace std;
38 
39 int main()
40 {
41     string str1,str2;
42     while(cin >> str1 >> str2)
43     {
44         int len1 = str1.length();
45         int len2 = str2.length();
46         char ch1,ch2;
47         int flag = 1;
48         int f = 0;
49         int ff = 0;
50         
51         if(len1 != len2)
52         {
53             f = 1;
54             cout << '1' << endl;
55         }
56         else
57         {
58             for(int i = 0; i < len1 ; i ++)
59             {
60                 ch1 = tolower(str1[i]);
61                 ch2 = tolower(str2[i]);
62                 if(str1[i] != str2[i])
63                 {
64                     flag = 0; // 不为情况3 
65                     if(ch1 != ch2)
66                     {
67                         cout << '4' << endl;
68                         ff = 1; //为情况四 
69                         break;
70                      } 
71                  } 
72             }
73         
74         }
75         if(flag == 1 && f == 0 && ff ==0)
76         cout << '2' << endl;
77         else if(flag ==0 && f == 0 && ff ==0)
78         cout << '3' << endl;
79     }
80     return 0;
81 }

本题代码自己写的比较烂,希望大佬指正。

查了个关于字母大小写的方法,汇总如下:

 1 /*
 2 2020年3月25日15:39:24
 3 在做字符串类型的题目是经常会遇到大写小小字母的问题
 4 在网上找了几种方法
 5 汇总如下 
 6 */
 7 
 8 #include<iostream>
 9 #include<ctype.h>
10 using namespace std;
11 
12 char upChar(char c)
13 {
14     return (char)(c - ('a' - 'A'));
15 }
16 char downChar(char c)
17 {
18     return (char)(c + ('a' - 'A'));
19 }
20 
21 int main()
22 {
23     /*方法一: 
24     使用C语言提供的函数:toupper(),tolower()
25     使用这两个函数需要引入头文件:#include<ctype.h>
26     */
27     char c = 'A';
28     char b = 'a';
29     printf("%c
",toupper(b));
30     printf("%c
",tolower(c));
31     
32     /*方法二: 
33     自己编写转换函数:
34     因为大小写之间的ASCII码值的差值是固定的,因此可以使用‘a’-‘A’来获取差值
35     */
36     cout << upChar(b) << endl;
37     cout << downChar(c) << endl;
38     
39     return 0;
40 }
原文地址:https://www.cnblogs.com/wlyperfect/p/12566981.html