0

私はCコードを書くのに3週間ほど慣れていないので、オンラインでホストされているハーバードコースのビデオからいくつかの例を試している初心者です. キーワードに基づいてファイルを暗号化するコードを作成しようとしています。

ポイントは、アルファベットの各文字に 0 から 25 までの数値が割り当てられるため、「A」と「a」は 0 になり、同様に「z」と「Z」は 25 になります。キーワードが「abc」の場合たとえば、「012」という数値形式に変換できる必要があります。私が取ろうとしているアプローチ (多くの c 関数についてまだ何も学んでいない) は、アルファベットのリストを配列に割り当てることです。講義で彼は多次元配列をほのめかしたと思いますが、それを実装する方法がわかりません。問題は、アルファベットが配列として格納されている場合、文字が配列の実際の値になり、値に基づいて配列を検索する方法を知る必要があることですが、その方法はわかりません (これまでのところ、インデックスに基づいて値を返してきました)。私' これを理解できるように、疑似コードのヘルプが必要です。ありがとう

4

5 に答える 5

0

多次元配列の使用は、小文字と大文字の両方のアルファベットを配列に格納して、それらをマップできるようにすることです。それらのコードを使用するのが効率的な方法ASCIIですが、初心者なので、この例では と の処理を​​紹介するfor loopsmultidimensional arrays思いますが、これはインストラクターの計画でもあると思います。

まず、アルファベットの配列を設定しましょう。各行に 26 個のアルファベットを含む 2 つの行があります。

alphabetsEnglish[26][2] = {{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'},
                           {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}};

これで、両方のケースの要素をマッピングできます。

int main()
{
    int c,i,j;
    char word[10]; 

    printf("Enter a word:");
    scanf("%s",word);

    c=strlen(word);
    printf("Your word has %d letters ", c);

    for (i = 0; i < c; i++) //loop for the length of your word
    {
        for (j = 0; j <= 25; j++) //second loop to go through your alphabet list
        {
            if (word[i] == alphabetsEnglish[0][j] || word[i] == alphabetsEnglish[1][j]) //check for both cases of your alphabet
            {  
                printf("Your alphabet %c translates to %d: ", word[i], j);
            }
        }
    }
    return 0;
}
于 2012-08-16T05:23:30.343 に答える
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int *conv(char* str){
    static const char* table = "abcdefghijklmnopqrstuvwxyz";
    int size, *ret, *p;
    if(NULL==str || *str == '\0') return NULL;
    size = strlen(str);
    ret=p=(int*)malloc(size*sizeof(int));
    while(*str){
        char *pos;
        pos=strchr(table, tolower(*str++));
        *p++ = pos == NULL ? -1 : pos - table;
    }
    return ret;
}

int main(void){
    char *word = "abc";
    int i, size = strlen(word), *result;
    result = conv(word);
    for(i=0;i<size;++i){
        printf("%d ", result[i]);//0 1 2
    }
    free(result);
    return 0;
}
于 2012-08-16T12:22:51.210 に答える
0

C では、acharは 8 ビットの整数であるため、文字が正しいと仮定するとchar、最初の文字 (a) をオフセットとして使用することで、実際に値を使用してインデックスを取得できます。

char offset = 'a';
char value  = 'b';
int index = value - offset; /* index = 1 */
于 2012-08-16T05:11:42.743 に答える
0

これまでに何を学んだかわからないので、これに答えるのは難しいですが、ここで私が何をするかについてのヒントを示します。それらはゼロから始まりません。それらをintにキャストして、ASCII値を取得できます。

これが私がそれを書く方法の擬似コードです:

Cast the character to a number
IF it's between the ascii values of A and Z, subtract it from A
ELSE Subtract it from the ASCII value of a or A
Output the result.

それだけの価値はありますが、多次元配列に関連する問題の明確な解決策はわかりません。

于 2012-08-16T04:34:31.657 に答える
0
  • char '0' は値 48 です
  • char 'A' は値 65 です
  • char 'a' は値 97 です

あなたは配列を検索する方法を学びたいと言った:

char foo[26]; //your character array 

...
...
  //here is initialization of the array
for(int biz=0;biz<26;biz++)
 {
    foo[biz]=65+biz; // capital alphabet
  }
 ...
 ...
 //here is searching 1 by 1 iteration(low-yield)
char baz=67;   //means we will find 'C'
for(int bar=0;bar<26;bar++)
{
    if(foo[bar]==baz) {printf("we found C at the index: %i ",bar);break;}
}

 //since this is a soted-array, you can use more-yield search algortihms.

バイナリ検索アルゴリズム (後の章で使用できます): http://en.wikipedia.org/wiki/Binary_search_algorithm

于 2012-08-16T04:43:39.693 に答える