我认为你误解了什么switch
是。switch
是一个选择结构,例如if
/ else
。例如,这两个代码片段(通常)是等效的:
if(a == 0)
printf("%s\n", "zero");
else if(a == 1)
printf("%s\n", "one");
else if(a == 2)
printf("%s\n", "two");
else
printf("%s\n", "invalid");
switch(a)
{
case 0:
printf("%s\n", "zero");
break;
case 1:
printf("%s\n", "one");
break;
case 2:
printf("%s\n", "two");
break;
default:
printf("%s\n", "invalid");
}
我不完全清楚您要做什么,但是当您写“如果它们匹配将匹配的字母test[t] 切换为0,因此无法再次匹配”时,听起来您的意思是:
if (userword[k] == letterstest[t]){
letterstest[t] = '\0';
}
编辑添加:好的,我想我现在明白你想要做什么了:
- 您想确认 和 之间的每个字符都
userword[0]
出现在和userword[wordsize-1]
之间。letterstest[0]
letterstest[7]
userword[0]
如果给定字符在and之间出现多次,则它必须在and之间userword[wordsize-1]
出现至少同样多次。那就是——一个介于和之间的字符只能算一次。letterstest[0]
letterstest[7]
letterstest[0]
letterstest[7]
- 只要最终答案正确,您就可以更改
letterstest[0]
和之间出现的字符;letterstest[7]
也就是说,您不需要保留letterstest
.
- 该字符
'\0'
不会出现在userword[0]
和之间userword[wordsize-1]
,因此可以用作“虚拟”值,意思是“不匹配”。
那是对的吗?
如果是这样,那么你可以写:
for(k = 0; k < wordsize; k++) {
for(t = 0; t < 8; t++) {
if(userword[k] == letterstest[t]) {
letterstest[t] = '\0'; /* don't let letterstest[t] count again */
break; /* O.K., we've matched userword[k], we can move on */
}
}
if(t == 8) /* we reached letterstest[8] without finding a match */
return 0;
}
return 1; /* we found a match for each character */