P1308 [NOIP2011 普及组] 统计单词数
一、知识点整理
1、字符串转小写
//转为小写
transform(a.begin(), a.end(), a.begin(), ::tolower);
for (int i = 0; i < b.size(); i++) if (b[i] >= 'A' && b[i] <= 'Z') b[i] += 32;
2、读入带空格的字符串
//读入一行数据之前,如果有输入,要getchar();
getchar();
//读入b字符串
getline(cin, b);
3、查找子串
中返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记。(返回值可以看成是一个型的数)
string s("1a2b3c4d5e6f7jkg8h9i1a2b3c4d5e6f7g8ha9i");
string flag;
string::size_type position = s.find("jk");
//find 函数 返回jk 在s 中的下标位置, 如果没找到,返回一个特别的标志c++中用npos表示,我这里npos取值是4294967295,
if (position != string::npos)
printf("position is : %d\n" ,position);
else
printf("Not found the flag\n");
4、首次位置,最后一次位置
flag = "c";
position = s.find_first_of(flag);
printf("s.find_first_of(flag) is :%d\n",position);
position = s.find_last_of(flag);
printf("s.find_last_of(flag) is :%d\n",position);
5、查找某一给定位置后的子串的位置
//从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标
position=s.find("b",5);
cout<<"s.find(b,5) is : "<<position<<endl;
6、查找所有子串在母串中出现的位置
flag="a";
position=0;
int i=1;
while((position=s.find(flag,position))!=string::npos)
{
cout<<"position "<<i<<" : "<<position<<endl;
position++;
i++;
}
二、实现代码
#include <bits/stdc++.h>
using namespace std;
int pos = -1;
int cnt;
string a, b;
int main() {
cin >> a;
//转为小写
transform(a.begin(), a.end(), a.begin(), ::tolower);
//扩展为左右加空格
a = ' ' + a + ' ';
//读入一行数据之前,如果有输入,要getchar();
getchar();
//读入b字符串
getline(cin, b);
//左右加空格
b = ' ' + b + ' ';
//转为小写
transform(b.begin(), b.end(), b.begin(), ::tolower);
//在b中查找a
int p = 0;
while ((p = b.find(a, p)) != string::npos) {
cnt++;
if (cnt == 1) pos = p;
p++;
}
if (cnt > 0) printf("%d %d\n", cnt, pos);
else printf("%d", -1);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-11-18 ubuntu中vim下按上下左右键时输入A、B、C、D
2017-11-18 利用SQL SERVER对比两张表的数据一致性