• 締切済み

C言語 暗号化プログラムの作成

アルファベット文字列を暗号化するプログラムを作りたいのですが、暗号化の方法がわかりません。 暗号化は、アルファベット文字列を入力した後、数字を入力して、その数字分文字をずらすというものです。 例:"Date 5"⇒"Ifyj 5" (Dの5個先はIなのでIとする。 同様にa⇒f    t⇒y    e⇒j) "Take 20"⇒"Muey 20" (Zを過ぎたらまたAからずらしていく。)

みんなの回答

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

アルファベットくらいだったら、対応関係をテーブルに持たせてしまえば?

関連するQ&A

  • c言語 暗号化のプログラム

    大文字アルファベットの文字列を暗号化するプログラムを作りたいのですが、どうやったら暗号化するのかわかりません。 暗号化は文字をずらして行います。 ABC→BDF Aは1文字目なので一文字ずらしてB Bは2文字目なので二文字ずらしてD Cは3文字目なので三文字ずらしてF わからないのは文字のをどうやってずらすのかです。 ヒントだけでもいいので・・・

  • 恥ずかしながらC言語解析中のプログラムで!?

    練習問題 5-20 列数を示す数値を入力し、'a'~'z'の文字を指定された列数に従って表示するプログラムを作成しなさい。  以下のプログラムを解析中で、まだ素人で基本的な質問ですがご了承ください。 1) int col; /* 2) char i;/*文字列関数*/ 3) scanf( "%d", &col ); /*英数文字の行に並ぶアルファベットの個数を1~26までの任意の数字を一件入力する。*/ 4) for( i = 0 ; i < 26 ; i++ ){ /*アルファベットは26個はa b c・・・の順番でループする命令*/ 5) if( i > 0 && ( i % col ) == 0 )/*アルファベットのループ範囲はa~です。アルファベット26文字÷3)で入力した数の余りが0・・・? 6) printf( "\n" ); /*結果がでたら改行する。*/ 7) printf( "%c", 'a' + i ); /* 現在解析中*/ 8) } -----------------------------------------------------------------  以上ですが、  5)の==0で、このプログラムでの役割は何ですか?  よろしくお願いいたします。

  • C言語のプログラムです。

    次のようなプログラムを作成しようと考えています。 1.文字列を入力し、入力した文字列にアルファベット以外の文字が含まれていたら再入力。 2."end"もしくは"END"が入力されたらプログラム終了。 3.main関数とは別の関数で入力した文字列に現れる文字を全て入力順に大文字で表示する。(小文字と大文字は同じ文字として扱い、出現個数も合わせて表示する) ※2.では文字列を比較するstrcmpを使用。 表示結果例)  入力:DxbhzAeFSXY  出力:D=1,X=2,B=1,H=1,Z=1,A=1,E=1,F=1,S=1,Y=1 (応用)3.では入力順に表示させていたが、アルファベット順に結果を表示する。 上記の2.までのプログラムは作成できたのですが、3.及び応用が分からず大変困っています。 どなたかご教授ください。 #include <stdio.h> #include <string.h> int sub(int ss[i],int n){ int x; for(x=1; x<=n; x++){ //小文字を大文字に変換 if(ss[i]>=97){ ss[i]=ss[i]-32; } } } int main(void){ char ss[80]; char sa[2][4]={{\"end\"},{\"END\"}}; int a, i, n; int flag= 0; //アルファベット以外の入力があった際の判別 do{ printf(\"文字列を入力してください\\n\"); gets(ss); n= strlen(ss); //文字列ssの長さを求める if(n=3 && ((strncmp(ss,sa[0],3)==0)) || ((strncmp(ss,sa[1],3)==0))){ //endまたはENDの判定 return 0; } for(i=0; i<n; i++){ if((ss[i]>=65 && ss[i]<=90) || (ss[i]>=97 && ss[i]<=122)){ } else{ flag=1; break; } } }while(flag=1); }

  • c言語の難しい問題について

    (c言語の問題) 下記のプログラムを完成させ、キーボードから文字列を読み込み、-1文字ずらすことによって暗号化を行うプログラムを作りなさい。ただし、ピリオド、空白などはそのままにするようにすること。 例)this is a pen. sghr hr @ qdm. #include<stdio.h> #define CHAR_NUM 256 void angou( I ) { II } int main(void) { unsigned char text[CHAR_NUM]; char moji; int i; puts("暗号化する文字を入力しなさい。"); while((moji=getchar()) !=EOF){ text[i]=moji; i++; } angou(text i); printf("%s",text); return(0); } I、IIに入る文を書きなさい。 私はIには「char x[],int y」 IIには 「if('A'<x[i]<'Z' && 'a'<x[i]<'z') int j; for(j=0;j<y;j++) x[j]=x[j]-1 else」 といれたのですが、出力がうまくでません。どうすればいいのですか?

  • C言語の問題

    配列の問題 1.キーボードから入力したアルファベットの大文字(A~Z)の入力回数をそれぞれ数え、結果を画面出力するプログラムを作成せよ。但し、入力の終了はEOFとし、入力回数のカウントには、配列を用いるものとする。(文字ごとに回数を格納する配列を用意する) 2.キーボードから番号(数字)を入力し、その番号に該当する文字列中の文字を画面表示するプログラムを作成せよ。なお、数字以外の文字が入力した場合と、文字列の範囲外の数字が入力された場合は、任意のメッセージを出力し、再入力するようにする。また文字列はキーボードから入力するものとする。 この問題が解けなくて困ってます。どうか知恵をかしてください。

  • c言語のプログラムで行列の積を計算する

    指定された行・列数(それぞれ10以下とする)の行列 X, Y の積 Z = X × Y を求めるプログラムを作成せよ.行列の要素はすべて整数とする. このプログラムで行と列の成分を入力するときに、1列になってしまうのですがどうしたらちゃんと入力できますか? int main(void) { double A[10][10]; double B[10][10]; int i,j,m,n,p,k; printf("行列xの行数は?:"); scanf("%d",&m); printf("行列xの列数(行列yの行数)は?:"); scanf("%d",&n); printf("行列yの列数は?:"); scanf("%d",&p); printf("行列xを入力してください。\n"); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &A[i][j]); } } printf("行列yを入力してください。\n"); for (i = 0; i < n; i++) { for (j = 0; j < p; j++) { scanf("%d", &B[i][j]); } }

  • c言語での暗号

    先日友人からc言語で暗号が作れるという話をききました シーザー暗号なんかもすごい興味深いなと思いました でも3文字ずらす(合ってましたっけ)程度じゃすぐ解読されちゃうと思うんですよね そこで思ったのですが 何文字目は何文字ずらすみたいな暗号プログラムは作れたりするのでしょうか? たとえば「goo」だったら 1文字目のgは1文字ずらしてh 2文字目のoは2文字ずらしてq 3文字目のoは3文字ずらしてr 「goo→hqr」といったような感じです。(zはaに戻るとします 「zzz→abc」) 調べてみたのですが http://okwave.jp/qa/q3483673.html は可能だったのでうまく応用すればできるのかなと思いました。 実は友人はまだc言語習いたてみたいで、わからないといっていたのでここで質問させていただきました。 もしよろしければそのプログラムを教えていただけないでしょうか。

  • C言語のプログラム作成の課題の事なんですが

    小数とアルファベットを入力したとき、例えば “123.45a” と入力したとき、 プログラムの中で整数型の変数で “123.45” を一つの数字(double型)として認識し、その 数字を出力せよ。 というプログラムを組む課題なんですがさっぱり?わかりません。どなたか教えて戴けないでしょうか?

  • C++の連立方程式のプログラム

    3元3列の連立方程式の係数を格納し、格納されて結果を表示するプログラムを表示せよ。ただし以下の2通りで行う事 係数を『初期化』を使って配列に入力する キーボードから入れる 上に書いたやつを参考にできると思って載せたんですが、分かる人いますか? 問題の意味って 連立方程式の係数を入力して(9つの係数)それを3*3のマトリックスで出すってだけで解くわけじゃないんですかね?どこにも連立方程式を解くって書いてないわけだし。 つまり 『1つ目の係数を入力せよ 2 2つめの係数を入力せよ 3 … 9つ目の係数を入力せよ 9 2 3 4 8 8 0 4 5 9』 みたいな ヒントの所には、 3*3のマトリックス作って初期化を自分で行う っていうのと 連立方程式の形が書いてありますが a00x+a01y+a02z=α a10x+a11y+a12z=β a20x+a21y+a22z=γ そして、とりあえず、3*3行列はこれで出来ました。 #include <iostream> using namespace std; int main() { int i,j; int vector[]={10,20,30,40}; int matrix[][3] = {{1,2,3},{4,5,6},{7,8,9}}; for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout << matrix[i][j] << ' '; } cout << '\n'; } return 0; } しかし、問題の連立方程式の係数を格納とかキーボードから入力ができないんですよね 多分上に書いたプログラムくらいのレベルだからそんなに複雑にならないはずなんですが

  • シーザー暗号(C言語)

    シーザー暗号というものを作ろうとしていますが、文字のずらし方がわからず詰まっています。 手順は一応考えてあります。 (1)入力された文字を配列input[301]に代入 (2)何文字ずらすかを指定してその数値を変数countに代入 (3)入力された文字の長さを変数lenに代入 (4)inputとcountとlenを、文字をずらしてそれをoutputに返す関数shiftに渡す (5)outputを表示する のような感じですが、肝心の文字のずらし方がわかりません。 JISコードを使ってやるといいと聞いたんですが、そのやり方がわかりません。 ソース↓ #include <stdio.h> #include <string.h> int shift_char(char x[], int y, int z) { int i; for(i = 0; i <= z; i++) { x[i] = x[i] + y; } return x; } int main(int argc, char* argv[]) { char input[301]; char output[301]; int count, len, i; printf("文字を入力してください: "); scanf("%s" ,input); printf("何文字ずらしますか: "); scanf("%d" ,count); len = strlen(input); output = shift_char(input, count, len); for(i = 0; i <= len; i++) { printf("%s" ,output[i]); } return 0; } よろしくお願いします。

専門家に質問してみよう