簡體   English   中英

如何通過字符串數組中的字母搜索名稱?

[英]How to search for names by letters in a string Array?

有人知道如何在字符串數組中搜索名稱嗎? 如果我注冊名稱'jacob'並搜索cob ,則需要顯示jacob而不是不顯示任何內容。 我不知道strcmp是否是正確的方法。 有任何想法嗎?

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 20

struct name{
    char name[MAX];
};

void getRegister(struct name name[], int *nrNames);
void getSearch(struct name name[], int nrNames);
int readLine(char s[], int length);

int main(){
    int run=1;
    struct name name[MAX];
    int nrNames=0;

    while(run){
        char choice;
        printf("\n (1)Register\n(2)Search\n(3)Quit\n");
        scanf(" %c%*c", &choice);

        if(choice=='1') getRegister(name, &nrNames);
        if(choice=='2') getSearch(name, nrNames);
        if(choice=='3') run=0;
    }
    return 0;
}
void getRegister(struct name name[], int *nrNames){
    char input[MAX];
    printf("Enter name: ");
    readLine(input, MAX);
    (*nrNames)++;
}
void getSearch(struct name name[], int nrNames){
    int i;
    char input[MAX];
    printf("Enter name: ");
    readLine(input, MAX);
    if(i>=0){
        printf("Name/s:\n");
        for(i=0; i<nrNames;i++){
            if(strcmp(input, name[i].name)==0){
                printf("\n%s\n",name[i].name);
            }
        }
    }
}
int readLine(char s[], int length){
    int ch, i=0;
    while(isspace(ch=getchar()));
    while(ch!='\n' && ch!=EOF) {
        if(i<length) s[i++]=ch;
        ch = getchar();
    }
    s[i]='\0';
    return i;
}

嘗試在數組中搜索匹配項。 下面的代碼顯示第二個數組在第一個數組中每次出現的位置。 它使用幼稚的方法。 有更有效的算法,例如Knuth-Morris-Pratt或Boyer-Moore算法。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 20    

int main(){
    char c;
    char name[MAX], search_name[MAX];
    int i = 0, j = 0, match = 0, count = 0;

    printf("Register name: ");

    while ((c = fgetc(stdin)) != '\n') {
        if (i < MAX){
            name[i++] = c;
        }
    }
    name[i] = '\0';

    printf("Search name: ");
    i = 0;
    while ((c = fgetc(stdin)) != '\n') {
        if (i < MAX){
            search_name[i++] = c;
        }
    }
    search_name[i] = '\0';

    i=-1;
    match = 0;
    do {
        i++;
        j = 0;
        do {
            if (name[i+j] == search_name[j])
                match = 1;
            else {
                match = 0;
                break;
            }
            j++;
        } while (search_name[j] != '\0');
        if (match) 
            printf("Match on position %d ", i);        
    } while (name[i+j] != '\0');
    printf("\n");

    return 0;
}

我自己找到了解決方案。 這是那些像我一樣困住的人的代碼。

void searchName(const struct varor reg[], int nrOfGoods){
    int i;
    char name[20];
    printf("Enter name: ");
    readLine(name, WORDLENGTH);//gets input
    if(i>=0){
        printf("\nId.number \t Name \t\t\t Quantity\n");
        for(i=0; i<nrOfGoods;i++){
            if(strstr(reg[i].name, name)!=NULL){ //this should do the job
                printf("%-17d%-24s%-5d\n",reg[i].idnumber,reg[i].name.reg[i].quantity);
            }
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM