0

我正在尝试根据另一个字母来检查字符串字母,检查 userword[k] 中的第一个字母与 letterstest[t] 中的所有字母,如果它们匹配将字母test[t] 的匹配字母切换为 0 所以它不能再次匹配。我感到困惑的地方是 switch(){ 内部以及究竟会起作用。有没有一个案例:什么可以切换字符串的字母?

for (k = 0; k<wordsize; k++){
    for(t=0; t<8, t++){
        if (userword[k] != letterstest[t]) 
            return 0;

        if (userword[k] == letterstest[t]){    
            switch (letterstest[t]){

                    //unsure what case would work here
            }
        }
    }
}
4

2 回答 2

5

我认为你误解了什么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 */
于 2012-09-14T18:40:50.080 回答
0

好的,首先您可以使用任何函数来匹配其他字符或字符串...(如果您不想使用“for”循环)

在 linux 上使用“man”命令(函数):

  • strchr
  • 字符串
  • 指数
  • 索引...

如果你想切换一个字符,你可以使用字符的ascii代码(http://www.table-ascii.com/),或者直接使用字符...

例如,如果您想检查“A”字符,您可以这样做:

// Char Method
switch (letterstest[t]){
    case 'A':
        printf("A Detected !\n");
        break;
}

// Or Use The ASCII Code Method
switch (letterstest[t]){
    case 65:
        printf("A Detected !\n");
        break;
}

例如,如果您想检查“0”字符(数字),您可以这样做:

// Char Method
switch (letterstest[t]){
    case '0':
        printf("0 Detected !\n");
        break;
}

// Or Use The ASCII Code Method
switch (letterstest[t]){
    case 48:
        printf("0 Detected !\n");
        break;
}

例如,如果您想检查 0 字符('\0' NUL),您可以这样做:

// Char Method
switch (letterstest[t]){
    case '\0':
        printf("NUL Detected !\n");
        break;
}

// Or Use The ASCII Code Method
switch (letterstest[t]){
    case 0:
        printf("NUL Detected !\n");
        break;
}
于 2012-09-14T18:56:17.373 回答