字符串!!!!
1.在字符串中赋整数值 一定要注意是赋字符还是数字 !!数字也要加单引号变成字符
2.很容易看错 tolower的头文件是#include<cctype>
3.今天有好几次 把小写l看成数字1 以及大小写看错 这是字符串里面一出现就要避雷的!!!
4.对于凯撒密码 由于字母是循环的 所以可以拿下标0-26代表a-z (char((c-'a'+n)%26+'a'))
5.输入整数再输入字符串 中间一定要cin.ignore()
6.一直错 明明等于0 是不能输出的 但最后还是输出了 原因就是 写的不是字符0
if(N[i]!='0'){ if(!flag) cout<<"+"; cout<<N[i]<<"*"<<M<<"^"<<N.size()-1-i; flag=false; }7.find 如果有两个参数的话 第二个参数代表坐标从什么时候开始
【题目信息】
【易错点】
这题是今天收获最大的题目 首先他让我知道了 如何在输入字符串中间有空格的时候 用cin分割开来 把一句话拆成空格为分割的单词 再来判断这个单词是不是人名 又由于仅仅只有首字母大写 并且最后一个的结束也可以算在单词以内 其余的大写以及数字 都能推翻他不是单词 其实主要就是这个输入的问题 我开始是分割句子 但是那样分割不了单词 并且也无法遍历单词里面有没有数字导致这个首字母大写不作数
还有一个 我当时觉得我把sum=0 放在前面会更好
一共有两种形式 可以输入一串字符串进去 但是由于有cin 它可以自动分割
char c[1005]; while(cin >> c) { // 处理c } strlen(c)/获取长度 string s; while(cin >> s) { // 处理s } // s.length() 此时是一个单词的长度【代码】
int main() { int N; cin>>N; int sum=0; string str; //char str[1005]; while(N>0) { while(cin>>str) { //sum=0 不能放这里 这是遍历每个单词 但sum是一个句子的人名的总和 int l=str.length(); if(str[0]>='A'&&str[0]<='Z') //首先首字母一定要是大写//首先判断的是单词 {bool flag=false; for(int i=1; i<l; i++) { if(!(str[i]>='a'&&str[i]<='z'||str[l-1]=='.'||str[l-1]=='?'||str[l-1]=='!')) { flag=true; break; } } if(!flag) sum++; } if(str[l-1]=='.'||str[l-1]=='?'||str[l-1]=='!') //一个句子的结束 { cout<<sum<<endl; sum=0; N--; break; } } } return 0; }【题目信息】
开始的时候对题目的理解有问题 以为是要找从A开始的 后面看解答才发现 只要是字符串里面出现过的字符串 挨个连续 只要有重复的 这个K就不行 我再说一遍 substr的第二个参数是长度
【代码】
#include<iostream> #include<cmath> #include<climits> #include<vector> #include<string> #include<algorithm> #include<cctype> using namespace std; int main(){ int N; cin>>N; cin.ignore(); string str; getline(cin,str);//temp是他里面k个连续的值 而不是只能是从A 开始 的连续值 for(int k=1;k<=N;k++){//循环K的可能 bool flag=0; for(int i=0;i<N-k;i++){ string s0=str.substr(i,k); if(str.find(s0,i+1)<=100){ flag=1; break;//这个K不行 } } if(!flag) {cout<<k;break;} } return 0;}