1
#include <stdio.h>

int main()

#include <stdio.h>

int main()

{
    char msg[31] = {'\0'};
    char encrypted[31] = {'\0'};
    int key;


    printf("Please enter a message under 30 characters: ");
    fgets(msg, 31, stdin);

    printf("Please enter an encryption key: ");
    scanf("%d", &key);

    int i = 0;

    while (msg[i] && ('a' <= msg[i] <= 'z' || 'A' < msg[i] < 'Z'))
{
    encrypted[i] = (msg[i] + key);
    i++;
}

    printf("%s\n", msg);
    printf("%d\n", key);
    printf("%s\n", encrypted);

}

さて、文字をインクリメントするコードを取得しましたが、特殊文字とスペースを無視する方法がわかりません。また、 and%にループバックするにはどうすればよいですか?'a''A'

ありがとうございました。

4

3 に答える 3

0

scanffgetsこの状況では、あなたがそれらを使用した方法で問題ないようです。

C では、文字列は単なる文字の配列です。したがって、forループと配列のインデックスを使用して各要素にアクセスします。

for (int i = 0; i < strlen(str); i++) {
  char thisChar = str[i];
  //Do the processing for each character
}

必要に応じて算術演算を実行できますがthisChar、255 を超えないように注意してくださいkey。大きくなりすぎないようにチェックを入れるとよいでしょう。

于 2013-01-28T22:31:51.033 に答える
0
  1. forシンプルなループが必要です:

    for (int i = 0; i < 31; i++)
    {
        // operate on msg[i]
    }
    

    最初に文字列の長さがわからなかった場合はwhile、null ターミネータを検出するループを使用することをお勧めします。

    int i = 0;
    while (msg[i])
    {
        // operate on msg[i]
        i++;
    }
    
  2. あなたのfgetsscanfはおそらく問題ありませんが、個人的には、入力を読むときは一貫しfgetsています。その後、後でsscanf出ることができますkey

于 2013-01-28T22:32:01.470 に答える
0

scanf から文字列を取得する:

char msg[31];
scanf("%30s", msg);

OR (最初に配列を 0 で埋める必要があるため、効率が低下します)

char msg[31] = { 0 };
scanf("%30c", msg);

文字列の繰り返しは、for ループと同じくらい簡単です (必ず c99 または c11 を使用してください)。

int len = strlen(msg);
for(int i = 0; i < len; i++) {
    char current = msg[i];
    //do something
    msg[i] = current;
}

文字の「暗号化」(暗号化) にはいくつかの手順が必要です

  1. 大文字、小文字、またはアルファベット以外の文字があるかどうかを判断します
  2. アルファベットの場合は、アルファベットの位置を決定します。
  3. モジュラス演算子 (%) を使用して、位置を更新します。
  4. アルファベット順の場合は位置を修正します

ここでコードを提供することはできますが、それを自分で実行しても何も学べません。代わりに、上記の手順に基づいて暗号を実装することをお勧めします。

次のようなことができることに注意してください。

char c = 'C';
char e = 'E' + 2; 
char lower_c = 'C' - 'A' + 'a';
于 2013-01-28T22:46:01.223 に答える