[NOIP2011 普及组] 统计单词数 - 洛谷
基础知识
// string str1; //生成空字符串 // string str2("123456789"); //生成"1234456789"的复制品 // string str5(5, '1'); //结果为"11111" // 尾插一个字符s1.push_back('a'); //str.insert(s.begin()+i,'a')如果前面事s.begin()+i那么只能插入字符; // str.insert(pos,"string"如:cs):在指定的位置pos插入字符串; //string s1 = "123456789"; // s1.erase(s1.begin()+1); // 结果:13456789 // s1.erase(1);//删除1,包括1以后的所有值;//结果:1 // s1.erase(s1.begin()+1,s1.end()-2); // 结果:189//都是闭区间 // s1.erase(2,2); 从第二个位置开始是删除2后边的2个位置 // 结果:1256789 //转置字符串 // reverse(s.begin(),s.end());string str=s; //string s("dog bird chicken bird cat"); //字符串查找-----找到后返回首字母在字符串中的下标 // 1. 查找一个字符串 // if(s.find("chicken",0)!=-1) //cout << s.find("chicken") << endl; // 结果是:9 // 2. 从下标为6开始找字符'i',返回找到的第一个i的下标 //cout << s.find('i',6) << endl; // 结果是:11 //tring s1("0123456789"); //string s2 = s1.substr(2,5); // 结果:23456-----参数5表示:截取的字符串的长度
本题代码:
#include <bits/stdc++.h> #define endl '\n' using namespace std; int main() { string a;string b; //用string库,调用getline, 直接读入一整行 getline(cin,a); getline(cin,b); //转换大小写,可以都转换为大写,或者小写 ---》 // (tolower()函数,toupper()函数用法)。 for(int i=0;i<a.size();i++)a[i]=tolower(a[i]); for(int i=0;i<b.size();i++)b[i]=tolower(b[i]); //因为连起来的不算, //所以要在前后加几个空格,才能确保是一个单词 a=' '+a+' '; b=' '+b+' '; //先看看会不会找不到,用a.find()和string::npos //string::npos==-1; if(b.find(a)==string::npos) { cout<<-1<<endl; } else { int sum=0; //start表示起点 int start=b.find(a); //tmp用于更新 int tmp=b.find(a); //string::npos-->-1; while(tmp!=-1) { sum++; tmp=b.find(a,tmp+1); } cout<<sum<<' '<<start<<endl; } return 0; }
P1308 [NOIP2011 普及组] 统计单词数
于 2024-03-10 14:52:29 首次发布
本文介绍了C++中字符串处理的基础操作,如使用`find`函数查找子串、`substr`提取子串、`tolower`转换大小写,以及如何统计单词数和进行字符串的插入、删除和反转。
摘要由CSDN通过智能技术生成