使用strcmp比较C中的字符串

时间:2016-07-17 06:57:21

标签: c string

我正在尝试学习用C语言编程但是在操作字符串时遇到了麻烦,因为C将字符串视为数组。

我的目标是制作一个存储用户名字和姓氏的程序。

这是我的进步:

    Cursor cursor = db.rawQuery("select A, max(B) " +
            "from tb " +
            "where "CONDITIONS", null);

    cursor.moveToFirst();
    valueA = cursor.getDouble(0);  
    if (cursor.getCount() == 0) valueA = 999999;
    cursor.close();

但是,使用此代码,我收到错误,因为我的IDE(xCode)告诉我使用#include <stdio.h> int main(int argc, const char * argv[]) { //defining the variables char first_name[100]; char surname[100]; char ch[2]; // Asking for the first name and storing it printf("What's your first name?\n"); scanf("%s", first_name); // Prints the first name printf("Hey %s!\n",first_name); //Asks the user if they want to store their surname printf("Would you like to tell me your second name? This is optional so type 'Y' for yes and 'N' for no.\n"); scanf("%s", ch); //validate if they want to store it or not if (ch == "Y"){ printf("What is your surname?\n"); scanf("%s", surname); printf("Your whole name is %s %s", first_name, surname); } return (0); } 函数。然后我编辑了代码:

strcmp

然而,变量 if (strcmp(ch, "Y")){ printf("What is your surname?\n"); scanf("%s", surname); printf("Your whole name is %s %s", first_name, surname); } 不是文字,因此无法比较。

旁注

我也尝试比较两个文字,只是为了看它是如何工作的:

ch

但即使这样也会出错:

char *hello = "Hello";
char *Bye = "Bye";


if (strcmp(hello, Bye)){
    printf("What is your surname?\n");
    scanf("%s", surname);
    printf("Your whole name is %s %s", first_name, surname);
}

我认为由于缺乏经验,我无法做到这一点所以如果你能帮我理解我做错了什么以及如何解决这个问题,我将不胜感激。

3 个答案:

答案 0 :(得分:3)

您需要包含相应的标题:

#include <string.h>

另请注意,您所需的逻辑可能需要:

if (!strcmp(hello, Bye))

而不是:

if (strcmp(hello, Bye))

由于strcmp在相等的情况下返回0。

答案 1 :(得分:1)

这里有两个问题。首先,您需要查看strcmp返回的值,其次必须使用适当的hedder。

您必须使用:

#include <string.h>

其次,您必须编辑if-else语句,如下所示:

if (strcmp(ch, "Y") == 0){
    printf("What is your surname?\n");
    scanf("%s", surname);
    printf("Your whole name is %s %s", first_name, surname);
}

我们这样做是因为如果ch小于&#34; Y&#34;则strcmp函数返回负值,如果大于&#34; Y&#34;则返回正值。如果两个字符串相等则为0。

答案 2 :(得分:1)

关于如何使用scanf处理输入,您应该纠正几个问题。首先,总是通过检查return scanf来验证您期望的成功转化次数。接下来,如评论中所述,不需要在代码中包含<string.h>来进行单字母比较。使用字符比较而不是字符串比较。最后,始终将输入限制为可用字符数(加上 nul-terminatedating 字符。

将这些位放在一起,您可以执行以下操作:

#include <stdio.h>

#define MAXN 100

int main (void) {

    char first_name[MAXN] = "", surname[MAXN] = "";
    int ch;

    printf ("What's your first name?: ");
    if (scanf ("%99[^\n]%*c", first_name) != 1) {
        fprintf (stderr, "error: invalid input - first name.\n");
        return 1;
    }
    printf ("Hey %s!\n", first_name);

    printf("Enter surname name? optional (Y/N) ");
    if (scanf("%c%*c", (char *)&ch) != 1) {
        fprintf (stderr, "error: invalid input - Y/N\n");
        return 1;
    }

    if (ch != 'y' && ch != 'Y')     /* handle upper/lower case response */
        return 1;

    printf ("Enter your surname?: ");
    if (scanf (" %99[^\n]%*c", surname) != 1) {
        fprintf (stderr, "error: invalid input - surname\n");
        return 1;
    }

    printf ("\nYour whole name is : %s %s\n", first_name, surname);

    return 0;
}

示例使用/输出

$ ./bin/firstlast
What's your first name?: David
Hey David!
Enter surname name? optional (Y/N) Y
Enter your surname?: Rankin

Your whole name is : David Rankin

仔细看看,如果您有任何问题,请告诉我。