文章目录
- 例题
- 1. 760.字符串的长度(fgets函数)重点!
- 2. 761.字符串中数字的个数
- 3. 763.循环相克令
- 4. 765.字符串加空格(getline函数+auto用法)重点!
- 5. 769.替换字符 重点!
- 6. 773.字符串的插入(substr函数)重点!
- 7. 772.只出现一次的字符(难题)
- 习题
- 1. 762.字符串匹配
- 2. 768.忽略大小写比较字符串大小
- 3. 767.信息加密
- 4. 766.去除多余的空格
- 5. 764.输出字符串
- 6. 770.单词替换
例题
1. 760.字符串的长度(fgets函数)重点!
Acwing 760.字符串的长度
- 使用fgets函数
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char str[101];
fgets(str,102,stdin);// stdin是系统定义好的变量,fgets会把回车读进来,就是说不会过滤回车
int len = 0;
for(int i = 0;str[i] && str[i] != '\n';i++) len++;// str[i]遇到\0就跳出来, str[i]不能等于回车,因为fgets会自动读入回车
cout << len << endl;
return 0;
}
- 使用getline函数
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
string str;
getline(cin,str);
cout << str.size() << endl;
return 0;
}
- 方法3
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char c;
int len = 0;
while(~scanf("%c",&c)) len++;
cout <<len << endl;
return 0;
}
2. 761.字符串中数字的个数
Acwing 761.字符串中数字的个数
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char str[101];
fgets(str,102,stdin);
int cnt = 0;
for(int i = 0;str[i]; i++)
if(str[i] >= '0' && str[i] <= '9')
cnt++;
cout << cnt << endl;
return 0;
}
3. 763.循环相克令
Acwing 763.循环相克令
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
cin >> n;
while(n--)
{
string a,b;
cin >> a >> b;
int x,y;
if(a == "Hunter") x = 0;
else if(a == "Bear") x = 1;
else x = 2;
if(b == "Hunter") y = 0;
else if(b == "Bear") y = 1;
else y = 2;
if(x == y) puts("Tie");
else if (x == (y + 1) % 3) puts("Player1");% 使用%可以让1赢0,2赢1,0赢2均符合
else puts("Player2");
}
return 0;
}
4. 765.字符串加空格(getline函数+auto用法)重点!
Acwing 765.字符串加空格
#include<iostream>
using namespace std;
int main()
{
string a;
getline(cin, a);// getline函数只能用到string类型
string b;
for(auto c : a) b = b + c + ' ';
b.pop_back();// 把新生成的字符串最后的空格删除
cout << b << endl;
return 0;
}
5. 769.替换字符 重点!
Acwing 769.替换字符
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
char str[31];
scanf("%s",str);// 读入到回车或者'\0'就结束了
char c;
scanf("\n%c", &c);// 读入要替换的字符,读入字符不会自动过滤掉前面的回车\n,会读入回车。需要在前面加\n
for(int i = 0;str[i];i++)
if(str[i] == c)
str[i ] = '#';
puts(str);
return 0;
}
6. 773.字符串的插入(substr函数)重点!
Acwing 773.字符串的插入
- substr函数可以查找从i开始,长度为len的字符串
#include<iostream>
using namespace std;
int main()
{
string a, b;
while(cin >> a >> b)
{
int p = 0;
for(int i = 0;i < a.size();i++)// string字符串本身就是数组
if(a[i] > a[p])
p = i;// 得到Ascii值最大的字符的下标
//前一个指从坐标0开始,长度为p+1的字符,后面是从坐标p+1开始,到最后的字符
cout << a.substr(0, p+1) << b << a.substr(p+1) << endl;
}
return 0;
}
7. 772.只出现一次的字符(难题)
Acwing 772.只出现一次的字符
#include<iostream>
#include<cstdio>
#include<cstring>// 字符串的函数
using namespace std;
int cnt[26] = {0};// 存储每个字母出现的次数
char str[100010];// 存储字符串
int main()
{
cin >> str;
// str[i]里面都是小写字母,小写字母 - 'a'结果是整数,0-25分别表示a-z,'a'在做运算时都是整数运算
for(int i = 0;str[i];i ++) cnt[str[i] - 'a'] ++;// cnt[]++表示对当前数组元素进行自增操作,元素值+1
for(int i = 0;str[i];i ++)
if(cnt[str[i] - 'a'] == 1)// 判断cnt[]中哪一个的元素值为1
{
cout << str[i] << endl;
return 0;
}
puts("no");
return 0;
}
习题
1. 762.字符串匹配
Acwing 762.字符串匹配
#include<iostream>
using namespace std;
int main()
{
double k;
string a, b;
cin >> k >> a >> b;
int cnt = 0;
for(int i = 0;i < a.size();i++)
if(a[i] == b[i])
cnt++;
if((double)cnt / a.size() >= k) puts("yes");
else puts("no");
}
2. 768.忽略大小写比较字符串大小
Acwing 768.忽略大小写比较字符串大小
#include<iostream>
#include<cstdio>// char需要
#include<cstring>// strcmp需要
using namespace std;
int main()
{
char a[100], b[100];
fgets(a, 100, stdin);
fgets(b, 100, stdin);
// fgets多了回车符,需要去掉回车符
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;
}
3. 767.信息加密
Acwing 767.信息加密
#include<iostream>
using namespace std;
int main()
{
string s;
getline(cin, s);// 读入有空格的字符串
for(auto &c : s)
{
if(c >= 'a' && c <= 'z') c = 'a' + (c - 'a' + 1) % 26;// 后面表示新的偏移量
else if(c >= 'A' && c <= 'Z') c = 'A' + (c - 'A' + 1) % 26;
}
cout << s << endl;
return 0;
}
4. 766.去除多余的空格
Acwing 766.去除多余的空格
- cin 做法
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin >> s) cout << s <<' ';// cin 遇到空格就停止读入,读入一个字符串,就加一个空格
return 0;
}
- 方法2:双指针算法
5. 764.输出字符串
Acwing 764.输出字符串
#include<iostream>
using namespace std;
int main()
{
string a,b;
getline(cin, a);
for(int i = 0;i < a.size();i++)
b += (char)(a[i] + a[(i+1)%a.size()]);// %因为i为最后一个字母时,i+1要变为零
cout << b << endl;
return 0;
}
6. 770.单词替换
Acwing 770.单词替换