C/C++基础知识——字符串(一)https://developer.aliyun.com/article/1437434
8.忽略大小写比较字符串大小
知识点:strcmp(a.c_str(),b.c_str())字符串比较函数
一般我们用 strcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0
为止。
如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。
但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如 Hello
和 hello
在忽略字母大小写时是相等的。
请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
输入格式
输入为两行,每行一个字符串,共两个字符串。注意字符串中可能包含空格。
数据保证每个字符串的长度都不超过 8080。
输出格式
如果第一个字符串比第二个字符串小,输出一个字符 <
。
如果第一个字符串比第二个字符串大,输出一个字符 >
。
如果两个字符串相等,输出一个字符 =
。
输入样例:
Hello hello
输出样例:
=
#include <bits/stdc++.h> using namespace std; int main() { string str1,str2; getline(cin,str1); getline(cin,str2); for(int i = 0;i < str1.size();i++) if(str1[i] <= 'Z' && str1[i] >= 'A') str1[i] += 32; for(int i = 0;i < str2.size();i++) if(str2[i] <= 'Z' && str2[i] >= 'A') str2[i] += 32; int x = strcmp(str1.c_str(),str2.c_str()); if(x == 0) cout << "=" << endl; else if(x > 0) cout << ">" << endl; else cout << "<" <<endl; return 0; }
知识点:fgets(a,100,stdin);无法去除‘\n’
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int main() { string a,b; fgets(a,100,stdin); fgets(b,100,stdin); //需要手动去除'\n' if(a[strlen(a)-1]=='\n')a[strlen(a)-1]=0; if(b[strlen(b)-1]=='\n')b[strlen(b)-1]=0; for(int i=0;a[i];i++) { if(a[i]>='A'&&a[i]<='Z') { a[i]+=32; } } for(int i=0;b[i];i++) { if(b[i]>='A'&&b[i]<='Z') { b[i]+=32; } } int t=strcmp(a,b); if(t==0)puts("="); else if(t<0)puts("<"); else puts(">"); return 0; }
9.去掉多余的空格
知识点:string a,b; a+=b;字符串可以实现相加减
输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。
输入格式
共一行,包含一个字符串。
输出格式
输出去掉多余空格后的字符串,占一行。
数据范围
输入字符串的长度不超过 200。
保证输入字符串的开头和结尾没有空格。
输入样例:
Hello world.This is c language.
输出样例:
Hello world.This is c language.
#include <bits/stdc++.h> using namespace std; int main() { string str; getline(cin,str); for(int i = 0;i <= str.size();i++) { if(str[i] != ' ') cout << str[i]; else if(str[i-1] != ' ') cout << str[i]; } return 0; }
知识点:cin可以自己去除空格
#include <bits/stdc++.h> using namespace std; int main() { string str; while(cin >> str) { cout << str << " "; } return 0; }
10.信息加密
知识点: s=(s-'A'+1)%26+'A' 位数取余控制循环
在传输信息的过程中,为了保证信息的安全,我们需要对原信息进行加密处理,形成加密信息,从而使得信息内容不会被监听者窃取。
现在给定一个字符串,对其进行加密处理。
加密的规则如下:
- 字符串中的小写字母,aa 加密为 bb,bb 加密为 cc,…,yy 加密为 zz,zz 加密为 aa。
- 字符串中的大写字母,AA 加密为 BB,BB 加密为 CC,…,YY 加密为 ZZ,ZZ 加密为 AA。
- 字符串中的其他字符,不作处理。
请你输出加密后的字符串。
输入格式
共一行,包含一个字符串。注意字符串中可能包含空格。
输出格式
输出加密后的字符串。
数据范围
输入字符串的长度不超过 100。
输入样例:
Hello! How are you!
输出样例:
Ifmmp! Ipx bsf zpv!
#include <bits/stdc++.h> using namespace std; int main() { string str; getline(cin,str); for(int i = 0;i < str.size();i++) { if(str[i] >= 'a' && str[i] <= 'z') { str[i] = (str[i]-'a'+1) % 26 + 'a'; } else if(str[i] >= 'A' && str[i] <= 'Z') { str[i] = (str[i]-'A'+1) % 26 + 'A'; } cout << str[i]; } return 0; }
11.输出字符串
知识点: 字符串中字符ASCII 值相加后转换为字符
给定一个字符串 a,请你按照下面的要求输出字符串 b。
给定字符串 a 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到 b 的第一个字符;
给定字符串 a 的第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到 b 的第二个字符;
…
给定字符串 a 的倒数第二个字符的 ASCII 值加最后一个字符的 ASCII 值,得到 b 的倒数第二个字符;
给定字符串 a 的最后一个字符的 ASCII 值加第一个字符的 ASCII 值,得到 b 的最后一个字符。
输入格式
输入共一行,包含字符串 a。注意字符串中可能包含空格。
数据保证字符串内的字符的 ASCII 值均不超过 6363。
输出格式
输出共一行,包含字符串 b。
数据范围
2≤a的长度≤100
输入样例:
1 2 3
输出样例:
QRRSd
#include <bits/stdc++.h> using namespace std; int main() { string str; getline(cin,str); for(int i = 0; i < str.size()-1;i++) { cout << (char)(str[i] + str[i+1]); } cout << (char)(str[0] + str[str.size()-1]); return 0; }
12.单词替换
知识点:#include中 stringstream ssin(s);的使用 ssin相当于cin 可直接输入字符串,将字符串变为字符流
输入一个字符串,以回车结束(字符串长度不超过 100)。
该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。
现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入格式
输入共 3行。
第 1 行是包含多个单词的字符串 s;
第 2 行是待替换的单词 a(长度不超过100);
第 3行是 a 将被替换的单词 b(长度不超过 100)。
输出格式
共一行,输出将 s 中所有单词 a 替换成 b 之后的字符串。
输入样例:
You want someone to help you You I
输出样例:
I want someone to help you
#include <bits/stdc++.h> using namespace std; int main() { string str; string x,y; getline(cin,str); cin >> x >> y; stringstream ssin (str); string s; while(ssin >> s) { if(s == x) cout << y << " "; else cout << s << " "; } return 0; }
13.字符串中最长的连续出现的字符
知识点:/***第一类指针做法***/
求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和 tab),如果这样的字符不止一个,则输出第一个。
输入格式
第一行输入整数 N,表示测试数据的组数。
每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过 200。
输出格式
共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。
输入样例:
2 aaaaabbbbbcccccccdddddddddd abcdefghigk
输出样例:
d 10 a 1
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; while(n--) { string str; cin >> str; char c; int idx = 0; for(int i = 0; i < str.size(); i++) { /***第一类指针做法***/ int j = i; while(j < str.size() && str[i] == str[j]) j++; if(j - i > idx) { idx = j - i; c = str[i]; } i = j - 1; } cout << c << " " << idx << endl; } return 0; }
C/C++基础知识——字符串(三)https://developer.aliyun.com/article/1437436