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のような選択構造です。たとえば、次の 2 つのコード スニペットは (一般的に) 同等です。ifelse

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';
    }

追加するために編集: OK、私はあなたがやろうとしていることを理解したと思います:

  • userword[0]と の間のすべての文字がとの間userword[wordsize-1]のどこかに現れることを確認したいとしletterstest[0]ますletterstest[7]
  • 特定の文字が ~ の間に複数回出現する場合、userword[0]少なくともuserword[wordsize-1]~ の間に同じ回数出現する必要がletterstest[0]ありletterstest[7]ます。つまり、letterstest[0]との間の文字はletterstest[7]1 回だけカウントできます。
  • 最終的な答えが正しい限り、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」コマンドを使用します。

  • ストレッチャー
  • strstr
  • 索引
  • インデックス ...

char を切り替えたい場合は、char の ascii コード (http://www.table-ascii.com/) を使用するか、直接 char...

あなたがそれを作ることができる「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 に答える