1.字符串长度
知识点:s.size();用法
给定一行长度不超过 100的非空字符串,请你求出它的具体长度。
输入格式
输入一行,表示一个字符串。注意字符串中可能包含空格。
输出格式
输出一个整数,表示它的长度。
数据范围
1≤字符串长度≤100
字符串末尾无回车
输入样例:
I love Beijing.
输出样例:
15
#include<bits/stdc++.h> using namespace std; int main() { string c; getline(cin,c); cout << c.size(); return 0; }
2. 字符串中的数字个数
知识点:字符串中字符的遍历:for(auto c:s)
输入一行字符,长度不超过 100,请你统计一下其中的数字字符的个数。
输入格式
输入一行字符。注意其中可能包含空格。
输出格式
输出一个整数,表示字数字字符的个数。
输入样例:
I am 18 years old this year.
输出样例:
2
#include<bits/stdc++.h> using namespace std; int main() { string s; int sum = 0; getline(cin,s); for(auto c:s) if(c <= '9'&&c >= '0')sum++; cout << sum << endl; return 0; }
给定一个字符串,在字符串的每个字符之间都加一个空格。
输出修改后的新字符串。
输入格式
共一行,包含一个字符串。注意字符串中可能包含空格。
输出格式
输出增加空格后的字符串。
数据范围
1≤字符串长度≤100
输入样例:
test case
输出样例:
t e s t c a s e
#include <bits/stdc++.h> using namespace std; int main() { string str; getline(cin,str); for(auto c:str) cout << c << " "; cout<<endl; }
3.循环相克令
循环相克令是一个两人玩的小游戏。
令词为“猎人、狗熊、枪”,两人同时说出令词,同时做出一个动作——猎人的动作是双手叉腰;狗熊的动作是双手搭在胸前;枪的动作是双手举起呈手枪状。
双方以此动作判定输赢,猎人赢枪、枪赢狗熊、狗熊赢猎人,动作相同则视为平局。
现在给定你一系列的动作组合,请你判断游戏结果。
输入格式
第一行包含整数 TT,表示共有 TT 组测试数据。
接下来 TT 行,每行包含两个字符串,表示一局游戏中两人做出的动作,字符串为 Hunter
, Bear
, Gun
中的一个,这三个单词分别代表猎人,狗熊和枪。
输出格式
如果第一个玩家赢了,则输出 Player1
。
如果第二个玩家赢了,则输出 Player2
。
如果平局,则输出 Tie
。
数据范围
1≤N≤100
输入样例
3 Hunter Gun Bear Bear Hunter Bear
输出样例
Player1 Tie Player2
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; while(n--) { string str1,str2; cin >> str1 >> str2; int x,y; if(str1 == "Hunter") x = 0; else if(str1 == "Bear") x = 1; else if(str1 == "Gun") x = 2; if(str2 == "Hunter") y = 0; else if(str2 == "Bear") y = 1; else if(str2 == "Gun") y = 2; if(x == y) cout << "Tie" << endl; else if(x == (y+1)%3) cout << "Player1" << endl; else cout << "Player2" << endl; } return 0; }
4.替换字符
知识点:getline(cin,s);可以输入包括空格的字符串
给定一个由大小写字母构成的字符串。
把该字符串中特定的字符全部用字符 #
替换。
请你输出替换后的字符串。
输入格式
输入共两行。
第一行包含一个长度不超过 3030 的字符串。
第二行包含一个字符,表示要替换掉的特定字符。
输出格式
输出共一行,为替换后的字符串。
输入样例:
hello l
输出样例:
he##o
#include <bits/stdc++.h> using namespace std; int main() { string str; char x; cin >> str >> x; for(auto c:str) if(c == x) cout << '#'; else cout << c; return 0; }
5. 字符串插入
知识点:str.insert(idx+1,substr);字符串的插入
有两个不包含空白字符的字符串 strstr 和 substrsubstr,strstr 的字符个数不超过 10,substrsubstr 的字符个数为 3。(字符个数不包括字符串结尾处的 \0
。)
将 substrsubstr 插入到 strstr 中 ASCII 码最大的那个字符后面,若有多个最大则只考虑第一个。
输入格式
输入包括若干行,每一行为一组测试数据,格式为
str substr
输出格式
对于每一组测试数据,输出插入之后的字符串。
输入样例:
abcab eee 12343 555
输出样例:
abceeeab 12345553
#include <bits/stdc++.h> using namespace std; int main() { string str,substr; while(cin >> str >> substr) { int idx = 0; for(int i = 0; i < str.size(); i++) { if(str[i] > str[idx]) { idx = i; } } str.insert(idx+1,substr); cout << str<< endl; } return 0; }
6.只出现一次的字符
给你一个只包含小写字母的字符串。
请你判断是否存在只在字符串中出现过一次的字符。
如果存在,则输出满足条件的字符中位置最靠前的那个。
如果没有,输出 no
。
输入格式
共一行,包含一个由小写字母构成的字符串。
数据保证字符串的长度不超过 100000。
输出格式
输出满足条件的第一个字符。
如果没有,则输出 no
。
输入样例:
abceabcd
输出样例:
e
#include <bits/stdc++.h> using namespace std; int main() { string str; cin >> str; int a[100000]; int idx = 0; for(auto c:str) { a[c]++; } for(auto c:str) { if(a[c] == 1) { idx = 1; cout << c << endl; return 0; } } if(idx == 0) cout << "no" << endl; return 0; }
7.字符串匹配
知识点:for(int i=0;i
给定两个长度相同的字符串 a 和字符串 b。
如果在某个位置 i上,满足字符串 a上的字符 a[i] 和字符串 b上的字符 b[i]相同,那么这个位置上的字符就是匹配的。
如果两个字符串的匹配位置的数量与字符串总长度的比值大于或等于 k,则称两个字符串是匹配的。
现在请你判断给定的两个字符串是否匹配。
输入格式
第一行包含一个浮点数 k,第二行包含字符串 a,第三行包含字符串 b。
输入的字符串中不包含空格。
输出格式
如果两个字符串匹配,则输出 yes
。
否则,输出 no
。
数据范围
0≤k≤10,
字符串的长度不超过 100。
输入样例:
0.4 abcde xbacd
输出样例:
no
#include <bits/stdc++.h> using namespace std; int main() { double k,x; cin >> k; string a,b; cin >> a >> b; double sum = 0; for(int i = 0;i < a.size();i++) if(a[i] == b[i]) sum++; if(sum/a.size() >= k) cout << "yes" << endl; else cout << "no" << endl; return 0; }
C/C++基础知识——字符串(二)https://developer.aliyun.com/article/1437435