算法--大小字符串问题
由于我对字符串问题的理解还不太到位,所以我将字符串问题中从大字符串中寻找小的字符串问题放在这里。以便考试遇到。
// // Created by 陈平 on 2018/7/8. //从大字串中寻找小的字串 #include "iostream" #include "string.h" using namespace std; char a[1000]; char b[1000]; //int main(){ // gets(a); // gets(b); // int len1 = strlen(a); // int len2 = strlen(b); // int flag = 1; // for (int i = 0; i <=len1-len2 ; ++i) { // flag = 1; // for (int j = 0; j <len2 ; ++j) { // if(a[i+j]!=b[j]){ // flag=0; // break; // } // // } // if(flag) {cout<<i+1<<endl;break;} // } //} //上述内容为查找字串第一次出现的位置 int main(){ gets(a); gets(b); int len1 = strlen(a); int len2 = strlen(b); int flag = 1; int time = 0; for (int i = 0; i <=len1-len2 ; ++i) { flag = 1; for (int j = 0; j <len2 ; ++j) { if(a[i+j]!=b[j]){ flag=0; break; } } if(flag) {time++;} } cout<<time; } //上面为字串出现的次数问题
上述问题包括两个,第一个(注释掉的)为返回第一次遇到的小字符串的位置。
第二个问题为:求小字符串在大字符串中出现的次数。
而我们用了最暴力的循环来做,第一层循环为遍历大数字的所有字符串--这里要注意当遍历字符串时,我们要注意边界要从0~len1-len2。防止其越界。
之后在大循环中循环小字串,只要不匹配就给flag为0。最后检查flag是否为1,若为1则time++。
因为菜,所以仍在努力。