- 字符串的遍历
对2个小于1000000000的输入,求结果。特殊算法举例:12345=14+15+24+25+34+3*5=54
对于特殊形式的算术操作,较好的办法是将输入的数用字符串形式存储,然后遍历字符串。注意在字符串做算术时是用ASCII码,所以必须将ASCII码转化为原本的数,所以必须减去字符0
int main(){
string s1,s2;
cin>>s1>>s2;
int ans=0;
for(int i=0;i<s1.size();i++){
for(int j=0;j<s2.size();j++){
ans+=(s1[i]-'0')*(s2[j]-'0'); //在字符串做算术时是用ASCII码,所以必须减去0的ASCII码
}
}
cout<<ans<<endl;
return 0;
}
-
字符串获取getline()
有时候需要获取一整行字符串,这时候需要用getline函数
用法:
getline(cin,赋值变量,结束符标志(可以省略)) -
字符串匹配–KMP算法
emmmm没想清楚怎么表达
void GetNext(string pattern){
int m=pattern.size(); //模式串长度
int j=0; //模式串遍历指针
next[j]=-1;
int t=next[j]; //t用来存储next数组值
while(j<m){
if(t==-1||pattern[t]==pattern[j]){
t++;
j++; //开始匹配,如果前缀当前最后一个值与后缀当前最后一个值相等则匹配长度加一
next[j]=t; //将此时匹配长度赋值给next[J]
}
else{
t=next[t]; //否则回到将t返回到前一个匹配成功的位置
}
}
return;
}
int KMP(string text,string pattern){
GetNext(pattern);
int n=text.size();
int m=pattern.size();
int i=0;
int j=0;
while(i<n&&j<m){
if(j==-1||text[i]==pattern[j]){
i++;
j++;
}
else{
j=next[j];
}
}
if(j==m){
return i;
}
else{
return -1;
}
}