string笔记
2020.10.16
C++ 將字符串和數(shù)組拼接起來
字符串匹配-string
這個(gè)代碼有問題
#include<bits/stdc++.h> using namespace std; int bijiao(string a,string b) {int maxer=0;int lena=a.length();int lenb=b.length();for(int i=0;i<lena;i++){int sum=0;for(int j=0;j<lenb&&i+j<lena;j++)///暴力{if(a[i+j]==b[j]){sum++;}}maxer=max(maxer,sum);}return maxer; } int main() {string a,b;int q,p,gcdd;while(cin>>a){if(a=="-1"){break;}///cin>>b;///很秀q=max(bijiao(a,b),bijiao(b,a));q*=2;p=a.length()+b.length();gcdd=__gcd(q,p);///gcd約分///對(duì)于,1,0要特判;if(q==0){printf("appx(%s,%s)=0\n",a.c_str(),b.c_str());continue;}if(q==p){printf("appx(%s,%s)=1\n",a.c_str(),b.c_str());continue;}printf("appx(%s,%s)=%d/%d\n",a.c_str(),b.c_str(),q/gcdd,p/gcdd);}return 0; }字符串乘方-string
poj 2406 Power Strings
///求最小循環(huán)節(jié)
///next數(shù)組
//這道題試問我們一個(gè)串有幾個(gè)循環(huán)節(jié)。
//循環(huán)節(jié)就是指相等的(真)前綴和(真)后綴的個(gè)數(shù)。
//我們知道,kmp過程中的next[i]是這個(gè)意義:0-i-1位中相等的真前后綴個(gè)數(shù)。
//那么next[len]就是指0-len-1位中相等的真前后綴個(gè)數(shù)。
///s[1]=s[3],s[2]=s[4],s[3]=s[5],s[4]=s[6].
///說明長度為2的字符串在原串中一定重復(fù)出現(xiàn),這就是len-next[len]的含義!
字符串處理-string
暴力
#include<bits/stdc++.h> using namespace std; int if_huiwen(string str) {int flag=1;int i=0,j=str.length()-1;while(1){if(str[i]!=str[j]){flag=0;break;}if(i==j||i+1==j)///反正已經(jīng)檢測過了,加1減1都行{break;}i++;j--;}if(flag){return 1;}else{return 0;} } int main() {string str;while(cin>>str){int ans=0;for(int i=0;i<str.length();i++){for(int j=1;j<=str.length()-i;j++){// cout<<i<<" "<<j<<" "<<str.substr(i,j)<<endl;if(if_huiwen(str.substr(i,j))){ans++;}}}printf("%d\n",ans);}return 0; }strange string
#include<bits/stdc++.h> using namespace std; int vis[300];///桶排,為提速開了abc,不用最后遍歷一遍 int cnt; int abc[26];///應(yīng)該只有三個(gè),但怕出事開了26個(gè) int main() {///只能有a,b,c//cout << "Hello world!" << endl;char str[100];while(cin>>str+1)///字符串以后都這么處理,很舒服{memset(vis,0,sizeof(vis));memset(abc,0,sizeof(abc));str[0]=str[1];///初始標(biāo)記cnt=0;int n=strlen(str+1);///記錄長度for(int i=1;i<=n+1;i++){vis[str[i]]++;///桶排if(str[i]!=str[i-1])///進(jìn)入新的字符{abc[++cnt]=vis[str[i-1]];///ans為標(biāo)記,且記錄相應(yīng)的個(gè)數(shù),cnt記錄是不是只有a,b,c}///%3也行,或者直接遍歷vis也行}if(cnt!=3||(abc[2]!=abc[1]||abc[3]!=abc[1]||abc[1]!=abc[3])){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;}}return 0; }取子字符串-string
#include<bits/stdc++.h> using namespace std; int main() {string str;int n,m;string zi;while(cin>>str>>n>>m){zi=str.substr(n-1,m-n+1);// str.erase(n,m+1);cout<<zi<<endl;}return 0; }氣球-string-map
#include<bits/stdc++.h> using namespace std; map<string,int>qi; int main() {int n;string buf;while(cin>>n&&n!=0){qi.clear();for(int i=0;i<n;i++){cin>>buf;qi[buf]++;}int maxer=0;string maxerstr;for(map<string,int>::iterator it=qi.begin();it!=qi.end();it++){if(it->second>maxer){maxer=it->second;maxerstr=it->first;}}cout<<maxerstr<<endl;}return 0; }回文字符串-string
#include<bits/stdc++.h> using namespace std;int main() {int n;cin>>n;string str;for(int nn=0;nn<n;nn++){cin>>str;int flag=1;int i=0,j=str.length()-1;while(1){if(str[i]!=str[j]){flag=0;break;}if(i==j||i+1==j)///反正已經(jīng)檢測過了,加1減1都行{break;}i++;j--;}if(flag){printf("YES\n");}else{printf("NO\n");}}return 0; }字符串合并-string
#include<bits/stdc++.h> using namespace std;int main() {string a,b;while(cin>>a>>b){cout<<a+b<<endl;}return 0; }總結(jié)
- 上一篇: 四、java基础-面向过程_对象_类中可
- 下一篇: 丑憨批的html实战