假设我们有一个名为StringA[] = "ABCD"
的字符串。您只需删除一个字符并创建新字符串,例如“ BCD,ACD,ABD,ABC”。这种情况下,您需要确定这些字符串在另一个字符串StringB[]
中出现多少次;
StringA的长度始终小于StringB的长度,但是它们都必须长度小于100且大于2
以下是我的尝试。我创建了一个指针,因此保存了S
的值,然后对其进行了操作,完成一次迭代后,我再次将其重新分配给S。但是它提供的解决方案是错误的。例如,type2
变量上面的情况需要为4,但它的值为1。我猜问题出在使用memmove
函数中。我将不胜感激。
#include <stdio.h>
#include <string.h>
int CheckOccurence(size_t len, char* stringA, char* stringB);
int type1, type2, type3;
int main(int argc, char **argv)
{
char L[100];
char S[100];
char *holdChar;
while(scanf("%s%s", S,L) == 2){
size_t lenS = strlen(S);
size_t lenL = strlen(L);
int minLengthSat = (lenS >= 2 && lenL >= 2);
int maxLengthSat = (lenS <= 100 && lenL <= 100);
int isSless = lenS <= lenL;
holdChar = S;
if(minLengthSat && maxLengthSat && isSless){
type1 = CheckOccurence(lenS,&S,&L);
for (int i =0; holdChar[i] !='\0'; i++ ){
//holdChar[i] = holdChar[i+1];
memmove(&holdChar[i], &holdChar[i+1], strlen(holdChar) -i);
type2 += CheckOccurence(lenS,holdChar,&L);
holdChar = S;
}
printf("%d%d\n",type1,type2);
printf("%s\n",S);
}else{
printf("Condition not fulfilled. Try again!\n");
}
}
return 0;
}
int CheckOccurence(size_t len, char* stringA, char* stringB){
int count = 0;
while(stringB = strstr(stringB, stringA))
{
count++;
stringB+=len;
}
return count;
}