まず、独習Cという参考書に乗っていた問題で、
「ユーザーから文字列を受け取って暗号化するプログラムを作成せよ。
このとき暗号化では、文字列の両端の文字を左から始めて交互に取り出し、文字列の真ん中に達した時に終わるようにする。
例えば Hi there という文字列は Heir eth となる」
という問題があって、この問題に関しては一応答えをちらちらと見ながらも理解はしました。
ここからが本題なのですが、「 入力した文字列→暗号化→元の入力した文字列 」 と変換できるプログラムも考えてみようと思いました(これはあくまで興味本位なのですが)
要は暗号化した文字列(Heir eth) を元の文字列(Hi there) に戻すプログラムのことです。
しかし、考えてもつまずいてしまったので質問させていただきます。
私が考えた暗号化文字列の復元の手順としては、
1、暗号化した文字列を配列に格納(例えばchar 型のstrという変数に格納するとする)
2、格納した配列のstr[0], str[2], str[4], str[6], str[7], str[5], str[3], str[1] という順に読み込みようにすれば、元の文字列になるのでは。
と考えたのですが、1つめの段階でつまずいてしまいました。
暗号化プログラムは以下に示します。
プログラムでは配列のある部分を参照して文字で表示、というのをつなげて文字列にしているので、うまく出力を配列に格納できればいいのになーと思っているのですが、なかなかできず。
ご教授お願いいたします。
#include<stdio.h>
#include<string.h>
int main(void)
{
char word[80];
int i, j;
printf("Input word: ");
gets(word);
i=0, j=strlen(word)-1;
while(i<=j){
if(i<j) printf("%c%c", word[i], word[j]);
else printf("%c", word[i]);
i++; j--;
}
printf("\n");
return 0;
}
OS: windows 7 32bit
コンパイラ: Borland C++ Compiler 5.5