C:将int转换为字符串
问题描述:
在我的代码中,我想使用表示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;
}
答
比较字符串,您需要使用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];
虽然这是一个字符串缓冲区有点大。
答
:
而且还输入N的限制如下。
使用string.h
库可以使用函数strcmp
。
要使用此函数类型strcmp(string1, string2)
请记住,如果字符串相同,strcmp将返回0。
所以你想要做的是使用if(!strcmp("Will", tmp))
输入字符串是否相同。
你也需要改变焦炭tmp[100,000]
to char tmp[100000]
,因为这是在C
希望这有助于支持的格式。
答
几件事情不像我会写他们。 我有几分钟的时间,写了一个编译示例。 也许你的问题可以通过这个来解决。
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;
}
那么,最新的问题是什么? – Borna 2014-10-03 21:57:07
您需要更新isWhite to isWill等等...还可以尝试使用枚举,因为它们可以帮助在int和字符串之间切换 – Honorificabilitudinitas 2014-10-03 21:57:21
您告诉我们您想使用什么,但实际上并未提出问题。你的代码不能编译?什么是错误信息?还是它没有做你想做的事?它有什么作用?你想要它做什么?你在哪里定义“isWhite”等?你为什么要设置“isWhite”,但测试“isWill”?如果你设置了'isWhite = 1',你为什么要测试'if(isWill == 0)'?那些测试相反的事情。 – 2014-10-03 21:57:26