簡體   English   中英

string.h 中的函數 strspn 無法正常工作

[英]Function strspn from string.h not working properly

我有一個 C 語言程序,它存儲了一個使用鏈表作為大學項目的學生列表。

typedef struct
{
    int day;
    int month;
    int year;
} date_t;

typedef struct
{
    char name[50];
    int dni;
    char email[30];
    float mark;
    date_t birthDate;
    bool gender;
} student_t;

typedef struct node
{
    student_t student;
    struct node *next;
} node_t;


int main() {
    node_t *list;

    InitList(&list);
    ReadFromFile(&list);
    //SearchByDni(list, 34790767); 
    //PrintList(list);
    SearchByName(list, "mari");
    printf("\nListSize: %u\n", ListSize(list));

    printf("");

    return 0;
}

我從一個包含學生的文件中填充列表(這部分工作正常),但是一旦我填充了列表,我需要一種方法來按給定的名稱(char [])在學生列表中進行搜索

void SearchByName(node_t *list, char *name){
    node_t *p;
    int len;
    int nameLength = strlen(name);
    int studentsCount = 0;
    for (p = list; p != NULL; p = p->next) {
        len = strspn(p->student.name, name);
        if (nameLength == len) {
            studentsCount++;
            printf("%s", p->student.name);
        }
    }
    printf("Students found searching '%s': %d\n", name, studentsCount);
}

該函數工作正常,我正在使用名為strspn的 string.h 函數。 正如函數的定義所說,它返回在 string1 中找到的 substring2 的長度,所以一旦我得到長度,我將它與作為參數給出的子串的長度進行比較以在列表中進行搜索,如果它們是同樣,這意味着我找到了搜索結果之一。 這工作正常,但我剛剛遇到當這個子字符串是“Mari”時它不能正常工作。

學生.txt 這就是我獲取數據的文件的樣子。 如果我使用子字符串“mari”進行搜索,我應該在屏幕上打印我找到 2 個結果,maria 和 mariano,因為兩者都匹配。 這就是我得到的:

在此處輸入圖片說明

雖然現在如果我們將參數從“mari”更改為“mar”:

在此處輸入圖片說明

函數 strspn 在我嘗試過的所有情況下都可以正常工作,除非使用 mari 並且我不知道為什么。

您可以在此示例中測試它返回的長度為 5 insted 的 4 是正確的。

在此處輸入圖片說明

如果您嘗試將“mari”更改為“mar”的相同代碼,它將返回 3,這是匹配的正確長度:

在此處輸入圖片說明

如果有人知道如何解決這個問題。

五是正確答案,“maria”中有五個連續的字符也在“mari”中——“m”、“a”、“r”、“i”和“a”。 strspn函數為您提供第一個字符串中從頭開始的連續字符數,這些字符也在第二個字符串中。 由於“a”在第二個字符串中,因此它總是很重要。

暫無
暫無

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

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