• 締切済み

文字列をa→1b→2...z→26に変換する

文字列を上記のように変換して表示するプログラムについて #include<stdio.h> int main() {    char ch[10];    printf("小文字のアルファベットの文字列を入力\n");    scanf("%s",&ch);    int i=0,j=97;    while(ch[i]!='\0'){      for(j; j<=97+26; j++){        if(ch[i]==j){          ch[i]=j-96;          printf("%d\n",ch[i]);        }      }    i++;    }    return 0; } 一文字の場合は問題ないのですが複数になるとうまくいきません 実行例 a 1 hello 8 となってしまいます。 改善をお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

いちおうしてきしておくと #4 にかいた事情により「探しまわ」るのが実は簡単な部類だったりする>#3. 厳密にいうと「小文字のアルファベット」そのものがロケールに依存する概念だしね.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

アルファベットが文字コード上連続する保証はどこにもありません. だからこのプログラムは完全にアウト. そもそも 97 ってなんだよ. ちなみに変換した結果どうなればいいんですか?

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.3

てか #include<stdio.h> int main() { char ch[10]; printf("小文字のアルファベットの文字列を入力\n"); scanf("%s",&ch); int i=0,j=97; while(ch[i]!='\0'){ printf("%d\n",ch[i]-'a'+1); i++; } return 0; } でいいんだよ。探しまわらなくてもね。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

98でいいんだw

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

for(j; j<=97+26; j++){  を for(j=0; j<=97+26; j++){ にすれば直るよ