A
ABA
ABACABA
ABACABADABACABA
...
分析:两串相同字符串中间夹着一个新字符
可以用strcat进行位置的复制
代码:
#include<bits/stdc++.h>
using namespace std;
char res[5000000];
int main(){
int n;
scanf("%d", &n);
int len = 0;
for(int i = 1; i <= n; i ++){
strcat(res + len + 1, res); // 把后面的接在前面的之后,前面可以是别的字符串
//也可以是现有字符串的位置,此处指的是现有位置往后偏移一位。 (s + len)为正后面
res[len] = 'A' + i - 1;
len = strlen(res);
}
printf("%s\n", res);
return 0;
}
strcat(s + len + i, s) 表示插在往后偏移的第i位
ossossosso
osso
输出3
看包括了几个捏~
分析:运用字符串长度的关系
代码:
#include<bits/stdc++.h>
using namespace std;
char s1[1005], s2[1005];
int ans;
int main(){
gets(s1);
gets(s2);
int len1 = strlen(s1) - 1, len2 = strlen(s2) - 1;
//因为不能包含\0
for(int i = 0; i < len1 - len2 + 1; i ++){
//len1 - len2 为多出来的字符,要加上本身长度占用的字符,如:
// 12345,找45,先看多出来了123,比三次,后面的45,再比一次
bool matched = true;
for(int j = 0; j < len2; j ++){
if(s1[i + j] != s2[j]){
matched = false;
break;
}
}
if(matched) ans++;
}
cout << ans <<endl;
return 0;
}