删除字符串中索引i的字符并创建新字符串C

时间:2018-08-02 00:26:18

标签: c memmove

假设我们有一个名为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;

}

0 个答案:

没有答案