- 締切済み
文字列を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 となってしまいます。 改善をお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
いちおうしてきしておくと #4 にかいた事情により「探しまわ」るのが実は簡単な部類だったりする>#3. 厳密にいうと「小文字のアルファベット」そのものがロケールに依存する概念だしね.
- Tacosan
- ベストアンサー率23% (3656/15482)
アルファベットが文字コード上連続する保証はどこにもありません. だからこのプログラムは完全にアウト. そもそも 97 ってなんだよ. ちなみに変換した結果どうなればいいんですか?
- maiko0318
- ベストアンサー率21% (1483/6969)
てか #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)
98でいいんだw
- maiko0318
- ベストアンサー率21% (1483/6969)
for(j; j<=97+26; j++){ を for(j=0; j<=97+26; j++){ にすれば直るよ