洛谷入门5-字符串
字符串的使用方法https://www.cnblogs.com/lanclot-/p/11142202.html
string里的find方法:https://www.cnblogs.com/wkfvawl/p/9429128.html
一、笨小猴
解题:
# include<iostream> # include<algorithm> # include<cmath> # include<string> # include<cstring> using namespace std; char word[100]; int maxx=0,minn=100,sum[26]={0}; bool isprime(int n)//判断素数 { if(n<2) return 0; if(n==2) return 1; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) return 0; } return 1; } int main() { cin>>word; int l=strlen(word); for(int i=0;i<l;i++)//遍历单词、字母加一 { sum[word[i]-'a']++; } for(int i=0;i<26;i++)//遍历字母表,找出最多最少的字母 { if(sum[i]>maxx)maxx=sum[i]; if(sum[i]!=0&&sum[i]<minn)minn=sum[i]; } int h=maxx-minn; if(isprime(h)) { cout<<"Lucky Word"<<endl; cout<<h; } else if(!isprime(h)) { cout<<"No Answer"<<endl; cout<<"0"; } return 0; }
二、标题统计
解题:
#include<iostream> #include<cstring> #include<stdio.h> using namespace std; char s[100]={0}; int sum=0; int main() { /*gets(a)从标准输入设备读字符串函数,可以无限读取,以回车结束读取,a必须是字符型数组,strlen(a)记录a数组实际字符串长度*/ gets(s); //统计标题字符 for(int i=0;i<strlen(s);i++) { if(s[i]>='a'&&s[i]<='z')sum++; if(s[i]>='A'&&s[i]<='Z')sum++; if(s[i]>='0'&&s[i]<='9')sum++; } cout<<sum; return 0; }
三、统计单词数
例:输入一个句子,计算单词数
#include <iostream> #include<string.h> #include<stdio.h> using namespace std; int main() { char a[100010]={0}; int state,cnt=0;//空格状态为0,字母状态为1 gets(a);//输入字符数组,包括空格 if(a[0]==' ')state=0;//判断第一个的状态 else state=1; for(int i=0;a[i];i++) { if(a[i]==' ')//是空格 { if(state==1)//前一个状态是字母 cnt++; } else//是字母 { if(state==0)//前一个是空格就改变状态 state=1; } } if(state==1)//最后一个是字母要加1 { cout<<cnt+1; } else cout<<cnt; return 0; }
本题题解:
# include<iostream> # include<string> using namespace std; int main() { string a; string b; getline(cin,a);//getline(cin,s)可以接受空格并输出,处于string流 getline(cin,b); //输入的变为小写 for(int i=0;i<a.length();i++){ a[i]=tolower(a[i]); } for(int i=0;i<b.length();i++){ b[i]=tolower(b[i]); } //字符串前后加空格,为了避免连在一起的字符串 a=' '+a+' '; b=' '+b+' ';//防止单词出现在第一个和最后一个 if(b.find(a)==string::npos){//找不到输出-1 cout<<-1<<endl; } else { int pos1=b.find(a); int pos2=b.find(a); int sum=0; while(pos2!=string::npos) { sum++; pos2=b.find(a,pos2+1); } cout<<sum<<" "<<pos1; } return 0; }