繁体   English   中英

C:比较结构中的两个字符串

[英]C: comparing two strings from a struct

我几乎是C语言的新手,我想知道如何比较两个单独的struct成员变量的字符串。 也许提供我的代码将使我的要求变得清晰。

我有以下结构:

typedef struct mentry {
     char *surname;
     int house_number;
     char *postcode;
     char *full_address;
} MEntry;

我想比较两个单独的MEntry变量。 我想检查两个条目的姓氏是否相同。 因此,我编写了以下方法:

 int me_compare(MEntry *me1, MEntry *me2) 
 {

     int surnameResult;


     char me1Surname = *(me1->surname);
     char me2Surname = *(me2->surname);

     surnameResult = strcmp(me1Surname, me2Surname);
     return surnameResult;
}

编译程序时,我收到以下消息:

 mentry.c:30:6: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
  surnameResult = strcmp(me1Surname, me2Surname);

我认为这行是错误的:

 char me1Surname = *(me1->surname);

设置me1Surname等于姓氏的值,而不是姓氏的地址?

我还收到另一条警告说:

"In file included from mentry.c:2:0:
 /usr/include/string.h:140:12:note: expected ‘const char *’ but argument  is of type ‘char’
extern int strcmp (const char *__s1, const char *__s2)"

有人可以解释为什么出现此警告吗?

您正在努力:

尝试显而易见的方法:

int me_compare(const MEntry *me1, const MEntry *me2) 
{
  return strcmp(me1->surname, me2->surname);
}

比较字符串而不使用字符串库。 如果相同,则此方法比较字符串,如果两个字符串相等,则返回值0。 传入方法内部的struct指针即可。

int compareStr(char *s, char *t)
{

    char t1 = *s;
    char t2 = *t;
    int x;

    while (t1 != '\0' && t2 != '\0') {
        x = (int)(t1 - t2);
        if (x ==0) {
            s++;
            t++;
            t1 = *s;
            t2 = *t;
        }
        else
        {
            break;
        }
    }


    return x;

}

您可以尝试这个简单的示例。 只需要使两个MEntry结构对象对其进行测试,并通过使用它们的地址来比较结构中的指针姓氏即可。

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

typedef struct {
    char *surname;
    int house_number;
    char *postcode;
    char *full_address;
} MEntry;

int me_compare(MEntry *me1, MEntry *me2);

int
main(void) {
    MEntry me1 = {"McLeod", 27, "3432", "27 Baker Street, London"};
    MEntry me2 = {"Baggins", 19, "3242", "145 Bag End, Shire"};

    if (me_compare(&me1, &me2) == 0) {
        printf("Surnames are identical.\n");
    } else {
        printf("Surnames are different.\n");
    }

    return 0;
}

int 
me_compare(MEntry *me1, MEntry *me2) {
    int surnameResult;

    surnameResult = strcmp(me1->surname, me2->surname);

    return surnameResult;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM