在c中从数组中删除字符串
我有一个程序,在字符串上调用白色、黑色、蓝色、红色和黄色。所以我的问题是如何检查输入的字符串,然后打印未调用的颜色 如果。在我的函数中,为字符串输入了白色、黑色、蓝色、黄色,程序将需要打印F red,这是一种可能性,例如无效输入,如狗、白色、鲸鱼、蓝色、黑色、红色,因此它应该打印黄色在c中从数组中删除字符串,c,C,我有一个程序,在字符串上调用白色、黑色、蓝色、红色和黄色。所以我的问题是如何检查输入的字符串,然后打印未调用的颜色 如果。在我的函数中,为字符串输入了白色、黑色、蓝色、黄色,程序将需要打印F red,这是一种可能性,例如无效输入,如狗、白色、鲸鱼、蓝色、黑色、红色,因此它应该打印黄色 const char *string[5]; string[0] = "White"; string[1] = "Black"; string[2] = "Blue"; string[3] = "Red"; str
const char *string[5];
string[0] = "White";
string[1] = "Black";
string[2] = "Blue";
string[3] = "Red";
string[4] = "Yellow";
gets(string);
printf(//);
您可以简化字符串的声明,它应该是
const
,因为我们不会修改它:
const char *strings[] = { "white", "black", "blue", "red", "yellow" };
然后,我们可以使用整数的位来表示已输入的字符串中的值:
unsigned int flags = 0; /* Zero has no bits set => nothing input so far. */
当我们得到一个输入时,我们通过字符串
查找匹配项,并在标志
中设置相应的位:
char input[1024];
if(fgets(input, sizeof input, stdin) != NULL)
{
const size_t len = strlen(input);
while(len > 0 && input[len - 1] == '\n')
input[--len] = '\0';
for(size_t i = 0; i < sizeof strings / sizeof *strings; ++i)
{
if(strcmp(strings[i], input) == 0)
flags |= 1 << i;
}
}
我希望,您应该能够使用上面的部分来获得所需的内容。您可以使用enum轻松做到这一点
定义要使用的颜色
typedef枚举{WHITE=0,黑色、蓝色、红色、黄色}颜色代码>
以及一个数组,用于为每个定义的颜色保存字符串
const char * colors_str[] = {
[ WHITE ] = "White",
[ BLACK ] = "Black",
[ BLUE ] = "Blue",
[ RED ] = "Red",
[ YELLOW ] = "Yellow"
};
现在,您可以将字符串与以下颜色进行比较:
strcmp( string_input, colors_str[ i ] )
然后用一个计数器把我们输入的和最终打印的所有颜色数相加
printf( "%s", colors_str[ total - sum ] );
- total是所有枚举的总和(在本例中为10,因为sum=0+1+2+3+4)
您这里所说的删除是什么意思?您只想打印最后一个字符串,对吗?您可以做的一件事就是获取您要删除或删除的字符串的索引,我们称之为索引。然后将所有字符串从索引+1移动到末尾,向上移动一个位置。do size=size-1;要打印最后一个字符串,只需执行printf(“%s”,s[size-1]);因此,在get S被调用了4次左右,并且它检查了数组中提供的字符串之后,我认为我需要跟踪调用了哪些字符串,然后返回未调用的字符串called@Rinz1er这里的string
和S
都不一样,对吧?你的代码毫无意义。您不能对字符串指针数组调用gets()
(事实上,您根本不应该使用gets()
),而且“调用”字符串也没有任何意义。请试着在问题中澄清你想做什么,而不是在评论中。
printf( "%s", colors_str[ total - sum ] );