【问题标题】:C Strncmp Return Partial InputC Strncmp 返回部分输入
【发布时间】:2012-12-09 22:28:24
【问题描述】:

我目前正在运行一个链表结构,我需要找到一种方法让用户在该结构中搜索某个字段。我已经这样做了,但问题是它必须是准确的。例如,如果用户输入“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;
}

有什么想法吗?我猜有一种方法可以与字符进行比较?谢谢!

【问题讨论】:

    标签: c list input linked-list strncmp


    【解决方案1】:

    你的问题并不完全清楚......

    如果您只想返回完全匹配,请改用strcmp

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

    如果您想返回部分匹配,请使用strncmp,但大小应与您的搜索字符串匹配:

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

    【讨论】:

    • 不不...我想返回部分匹配的完整记录。抱歉,如果我的问题不清楚。例如,我会输入“mag”,然后它会输出的结果将是“maggie numberhere addrhere”。
    • @JamesManes 啊,对。我编辑的答案希望能涵盖你的内容
    • 非常好!再次抱歉不清楚。感谢您的帮助!
    【解决方案2】:

    使用strncmp(current->name, search, strlen(search))strstr 函数代替strncmp(current->name, search, MAX)

    【讨论】:

      【解决方案3】:

      strncmp 比较要比较的字符数。所以不要比较那么多。

      首先比较字符串长度,或者直接使用strcmp()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        • 2021-06-17
        相关资源
        最近更新 更多