我有一个程序,在字符串上调用白色,黑色,蓝色,红色和黄色。所以我的问题是如何检查以查看输入的字符串然后打印未调用的颜色。
离。如果。白色,黑色,蓝色,黄色在我的函数中输入了字符串,程序需要printf red,这是其中一种可能性,例如狗,白,鲸,蓝,黑,红等无效输入,等等应打印出黄色
const char *string[5];
string[0] = "White";
string[1] = "Black";
string[2] = "Blue";
string[3] = "Red";
string[4] = "Yellow";
gets(string);
printf(//);
答案 0 :(得分:0)
您可以简化字符串的声明,它应该是const
,因为我们不会修改它:
const char *strings[] = { "white", "black", "blue", "red", "yellow" };
然后我们可以使用整数位来表示已输入的strings
中的值:
unsigned int flags = 0; /* Zero has no bits set => nothing input so far. */
当我们收到输入时,我们会通过strings
查看匹配项,并在flags
中设置相应位:
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;
}
}
然后最后打印所有未见过的strings
:
for(size_t i = 0; i < sizeof strings / sizeof *strings; ++i)
{
if((flags & (1 << i)) == 0)
printf("%s\n", strings[i]);
}
我希望你能够使用上述部分来获得你想要的东西。
答案 1 :(得分: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 ] );
并使用计数器对我们作为输入和最终打印给出的所有颜色数量求和
import static java.util.stream.Collectors.*;
final Map<Class<?>, Set<Object>> result = Stream.of(array) //
.collect(//
groupingBy(x -> x.getClass(), //
mapping(x -> x, toCollection(TreeSet::new))));