基于阵列的搜索功能

问题描述 投票:0回答:1

我一直试图创建一个完全基于数组而非字符串的搜索功能。目前我似乎发现的问题是,代码是在标记位置,而没有真正找到正确的字母。最终的目标是让代码找到完整的单词,并说明它是多少个字符到行。任何帮助将是非常感激的。

int main()
{
    int read = 1, i = 0, z = 0, q, o = 0, b;
    char a[15];
    char letters [] = "HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK";
    printf("HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK\n");
    printf("Please type in a word to search for in upper case:\n");
    scanf(" %c", &a[1]);
    scanf("%c", &a[2]);
    if (a[2] != '\n') {scanf("%c", &a[3]); q=2;}
    if (read == 1) {if (a[3] != '\n') {scanf("%c", &a[4]); q=3;} else read = 0;}
    if (read == 1) {if (a[4] != '\n') {scanf("%c", &a[5]); q=4;} else read = 0;}
    if (read == 1) {if (a[5] != '\n') {scanf("%c", &a[6]); q=5;} else read = 0;}
    if (read == 1) {if (a[6] != '\n') {scanf("%c", &a[7]); q=6;} else read = 0;}
    if (read == 1) {if (a[7] != '\n') {scanf("%c", &a[8]); q=7;} else read = 0;}
    if (read == 1) {if (a[8] != '\n') {scanf("%c", &a[9]); q=8;} else read = 0;}
    if (read == 1) {if (a[9] != '\n') {scanf("%c", &a[10]); q=9;} else read = 0;}
    if (read == 1) {if (a[10] != '\n') {scanf("%c", &a[11]); q=10;} else read = 0;}
    if (read == 1) {if (a[11] != '\n') {scanf("%c", &a[12]); q=11;} else read = 0;}
    if (read == 1) {if (a[12] != '\n') {scanf("%c", &a[13]); q=12;} else read = 0;}
    if (read == 1) {if (a[13] != '\n') {scanf("%c", &a[14]); q=13;} else read = 0;}
    if (read == 1) {if (a[14] != '\n') {scanf("%c", &a[15]); q=14;} else read = 0;}
    while (i != 1){
        printf("line read\n");
        if (a[1] == letters[z]){
            printf("Found");
        for (int p=0; p < q; p++){
              o = z+p;
              printf("checking for word\n");
              if (a[p] == letters[o]){
                    printf("That bitch");}
              else {break;}
        }}
        z++;
        if (letters[z]=='\n'){i = 1;}
    }
    printf("%c", letters[z]);
    printf("hmmm");
}
c arrays search
1个回答
2
投票

这段重新定义的代码应该对你有用。

#include <stdio.h>
#include <string.h>

int main()
{
    char str[] = "HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK";
    char letter[100];
    int i, j, k, counter;

    i = j = k = counter = 0;

    printf("%s\n", str);

    printf("Enter a substring to find: ");
    scanf("%s", letter);

    for (i = 0; str[i]; i++) { // str[i] != '\0'

        if (str[i] == letter[j]) {
            for (k = i, j = 0; str[k] && letter[j]; j++, k++)
                if (str[k] != letter[j])
                    break;

            if (!letter[j]) { // when letter[j] meets false and substring found
                printf("\nFound at %d!\n", counter);
                return 0;
            }
        } else {
            printf("."); // for decoration
            counter++;
        }
    }
    printf(" No matches!\n");

    return 0;
}

样本输出

HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK
Enter a substring to find: BOOK
................................................................
Found at 64!
© www.soinside.com 2019 - 2024. All rights reserved.