1

現在、リンクされたリスト構造を実行していますが、ユーザーが特定のフィールドの構造体を検索できるようにする方法を見つける必要があります。私はこれを行いましたが、問題はそれが正確でなければならないということです。たとえば、ユーザーが「maggie」と入力すると結果が返されますが、ユーザーが「mag」と入力すると、必要な maggie レコードが返されません。

int counter = 0;
char search[MAX];
record_type *current = head;

printf("\n\n- - - > Search Records\n\n");
printf("\tSearch: ");
scanf("%s", search);

/* search till end of nodes */
while(current != (record_type*) NULL) {
    if(strncmp(current->name, search, MAX) == 0) {
        printf("\t%i. %s", counter, current->name);
        printf("\t%u", current->telephone);
        printf("\t%s\n", current->address);
        counter++;
    }
    current = current->next;
}

何か案は?文字と比較する方法があると思いますか?ありがとう!

4

3 に答える 3

3

あなたの質問は完全に明確ではありません...

完全一致のみを返したい場合は、strcmp代わりに使用します

if (strcmp(current->name, search) == 0) {

部分的な一致を返したい場合はstrncmp、検索文字列に一致するサイズ以上で使用します。

if (strncmp(current->name, search, strlen(search)) == 0) {
于 2012-12-09T22:30:06.883 に答える
2

関数をstrncmp(current->name, search, MAX)使用strncmp(current->name, search, strlen(search))または使用する代わりに。strstr

于 2012-12-09T22:31:52.660 に答える
0

strncmp比較する文字数を比較します。だからそんなに比較しないでください。

文字列の長さを比較することから始めるか、単にstrcmp().

于 2012-12-09T22:30:33.787 に答える