2014-10-03 204 views
-1

在我的代码中,我想使用表示Will,Bob,Billy,Ryan或Ed而不是int的字符串。具体来说,使用N个字符串S [1],S [2] ... S [N],其中S [I]是上面的名称。如果你想比较字符串,这不是要走的路(1≤N≤100,000)C:将int转换为字符串

#include <stdio.h> 


int main(void) 

{ 

int input_num=0; 
int isWill = 0; 
int isBob = 0; 
int isBilly = 0; 
int isRyan = 0; 
int isEd = 0; 
int n=0; 

scanf("%d", input_num); 
printf("%d", input_num); 

for(n;n<input_num;n++) 
{ 
    char tmp[100,000]; 
    scanf("%s", tmp); 

    if(tmp == "Will") 
     isWill = 1; 
    else if(tmp == "Bob") 
     isBob = 1; 
    else if(tmp == "Billy") 
     isBlue = 1; 
    else if(tmp == "Ryan") 
     isRyan = 1; 
    else if(tmp == "Ed") 
     isEd = 1; 

} 
//end of input 

if(isWill == 0) 
    printf("Will\n"); 
if(isBob == 0) 
    printf("Bob\n"); 
if(isBilly == 0) 
    printf("Billy\n"); 
if(isRyan == 0) 
    printf("Ryan\n"); 
if(isEd == 0) 
    printf("Ed\n"); 

return 0; 

}

+1

那么,最新的问题是什么? – Borna 2014-10-03 21:57:07

+0

您需要更新isWhite to isWill等等...还可以尝试使用枚举,因为它们可以帮助在int和字符串之间切换 – Honorificabilitudinitas 2014-10-03 21:57:21

+0

您告诉我们您想使用什么,但实际上并未提出问题。你的代码不能编译?什么是错误信息?还是它没有做你想做的事?它有什么作用?你想要它做什么?你在哪里定义“isWhite”等?你为什么要设置“isWhite”,但测试“isWill”?如果你设置了'isWhite = 1',你为什么要测试'if(isWill == 0)'?那些测试相反的事情。 – 2014-10-03 21:57:26

回答

1

比较字符串,您需要使用strcmp库函数,如果两个参数字符串相等,返回0:

if (strcmp(tmp, "Will") == 0) 
    // tmp contains the string "Will" 

如果你想要一个字符串数组,你可以做一个二方法。你可以声明一个二维数组,其中第一维是名字的TNE数,第二个维度是出了名的最大长度:

char names[NUMBER_OF_NAMES][MAX_NAME_LENGTH+1]; 

要复制一个字符串,使用strcmp

strcmp(names[0], "Will"); 
strcmp(names[1], "Bob"); 
// etc. 

或者,你可以声明一维数组,其中每个元素是指针字符串:

char *names[NUMBER_OF_NAMES]; 

names[0] = "Will"; 
names[1] = "Bob"; 

注意,你分配一个指针的值为names[i];您不会将字符串内容复制到names[i]

最后,C不识别整数文字,如100,000;你要申报你的tmp缓冲区

char tmp[100000]; 

虽然这是一个字符串缓冲区有点大。

0

而且还输入N的限制如下。
使用string.h库可以使用函数strcmp
要使用此函数类型strcmp(string1, string2)
请记住,如果字符串相同,strcmp将返回0。
所以你想要做的是使用if(!strcmp("Will", tmp))输入字符串是否相同。

你也需要改变焦炭tmp[100,000]to char tmp[100000],因为这是在C

希望这有助于支持的格式。

1

几件事情不像我会写他们。 我有几分钟的时间,写了一个编译示例。 也许你的问题可以通过这个来解决。

char * colortext[] = 
{ 
    "unknown", 
    "white", 
    "black", 
    "blue", 
    "red", 
    "yellow" 
}; 

typedef enum color { 
    unknown = 0, 
    white, 
    black, 
    blue, 
    red, 
    yellow 
}; 

typedef struct 
{ 
    int number; 
    char name[200]; 
    color team; 
}Player; 

typedef struct 
{ 
    char * name; 
    color team; 
}Autoassign; 

Autoassign autoassign[] = 
{ 
    {"Will", white}, 
    {"Bob", black}, 
    {"Billy", blue}, 
    {"Ryan", red}, 
    {"Ed", yellow} 
}; 

int autoassignLength = sizeof(autoassign)/sizeof(autoassign[0]); 

int Player_print(Player * player) 
{ 
    int e = 0; 
    printf("\n"); 
    printf("Player %i Profile:\n", player->number); 
    printf("Name: '%s'\n", player->name); 
    printf("Team: '%s'\n", colortext[player->team]); 
    printf("\n"); 
    return e; 
} 

int Player_scan(Player * player, int number) 
{ 
    int e = 0; 
    int i; 
    printf("Input Player Name: "); 
    scanf("%s", player->name); 
    player->number = number; 
    player->team = unknown; 
    for(i = 0; i < autoassignLength; ++i) 
    { 
     if(0 == strcmp(player->name,autoassign[i].name)) 
     { 
      player->team = autoassign[i].team; 
      break; 
     } 
    } 
    return e; 
} 

int main(int argc, char ** argv) 
{ 
    int i; 
    int input_num, n; 
    Player players[10]; 

    printf("How many Players? "); 
    scanf("%d", &input_num); 

    for(n = 0; n < input_num ; n++) 
    { 
     Player_scan(&players[n], n+1); 
    } 

    for(n = 0; n < input_num ; n++) 
    { 
     Player_print(&players[n]); 
    } 

    return 0; 
}