洛谷入門5-字串
阿新 • • 發佈:2020-10-25
字串的使用方法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; }