C语言实战开发————字符串的查找

  字符串的查找是先输入语句,将之保存,然后再输入,查找它出现了多少次,看似简单,但对初学者而言却是一个不小的考验,若能研究透彻,实乃洗髓。
  首先,开始这个项目时另建两个文件并将其命名为myString.h和myString.cpp,其中,myString.h中添加函数标题,myString.cpp中添加函数的实行,原本的main.cpp中书写函数的结构。而后定义一个数组,保存所要写的内容。
  由于是查找字符串,因此我们可以在main函数书写的内容便是定义保存的数组,提示,输入字符串,输入查找的字符串,输出出现的次数。

int main( ){
char sentence[100] = { };
char word[20] = { };

input(sentence,"请输入语句");
input(word,"请输入查找的单词");

int count = find(sentence,word);
printf("你查找的单词出现次数为:%d",count);
return 0;
}

而后在mystring.cpp里面完善输入流程,即是

void input(char *p,char *des){
printf("%s",des);
printf("%s",p);
scanf("%s",p);
getchar( );
}

之后将find函数进行完善,而进行比较时需要判断字长,如果输入语句的字长还没有查找语句的长,就不需要再进行比较了,直接为0次,因此可得

int sLength = length(sentence);
    int wLength = length(word);
    if(sLength < wLength){
        return 0;
    }

如果输入语句字长比查找语句长的话,便需要从头开始进行比较,如果有相同的就依次进行比较,完全相同就记一次,然后从比较完时的那个数的下一个数开始进行下一轮比较,如果不是完全相同,就是从比较的那个数的下一个数开始进行比较。于是便有:

    int count = 0;
    int start = 0;
    for(int i = 0;i < sLength;i++){
        start = i;
        int j = 0;
        for(;j < wLength;j++){
            if(sentence[start + j] != word[j]){
                break;
            }
        }
        if(j == wLength){
            i = start + j - 1;
            count++;
        }
    }

在做完这些觉得可以结束时,你就漏了一个弊端,由于scanf具有的局限性,因此,我们需要自己定义一个方法加以完善。

void myScanf(char *p){
    int i = 0;
    while(1){
        char c = getchar ();
        if(c == '\n'){
            p[i] = '\0';
            break;
        }
        p[i] = c;
        i++;
    }
}

当然如果想不浪费空间保存可以使用指针进行保存,

char *inputName(){
    char *pName = NULL;
    int i = 0;
    printf("请输入");
    while (1) {
        char c = getchar();
        if (c == '\n') {
            break;
        }
        if(i == 0){
            pName = (char *)malloc(1*sizeof(char));
            if(pName == NULL){
                exit(EXIT_FAILURE);
            }
            pName[0] = c;
        }else{
            pName = realloc(pName, (i+1)*sizeof(char));
            if(pName == NULL){
                exit(EXIT_FAILURE);
            }
            pName[i] = c;
        }
        
        i++;
    }
    return pName;
}

你可能感兴趣的:(C语言实战开发————字符串的查找)