AKB48の推しメンをセンターにできちゃうかもしれない!? >>

① 3
② 1
③ 8

テキストに数字を入力した結果のソートは出来るのですが、それぞれの番号をソート順に表示するにはどうすれば良いのですか?

ソート 1・3・8
 番号 ②・①・③

よろしくお願いします。

A 回答 (3件)

実装としては非常に単純です。





import java.util.Arrays;
import java.util.Comparator;

public class Sort {

static class ArrayElement{
int viIndex;
String vsData;
ArrayElement(int viI, String vsD){
viIndex = viI;
vsData = vsD;
}
}

public static void main(String [] args) {

String[] array0 = {"x", "a", "b", "3", "1"};
ArrayElement[] array1 = new ArrayElement[array0.length];
ArrayElement ae = new ArrayElement(0, "");

for( int i = 0; i<array0.length; i++){
array1[i] = new ArrayElement(i+1, array0[i]);
System.out.println(
array1[i].viIndex+"; "+
array1[i].vsData+"; "+
"");
}

System.out.println();

// sortをカスタマイズする。
Arrays.sort(array1, new Comparator<ArrayElement>() {
@Override
public int compare(ArrayElement ae0, ArrayElement ae1) {
return ae0.vsData.compareTo(ae1.vsData);
}
});

for( int i = 0; i<array0.length; i++){
System.out.println(
array1[i].viIndex+"; "+
array1[i].vsData+"; "+
"");
}

}

}
    • good
    • 1
この回答へのお礼

ありがとうございます。

GUIにしてテキストに表示しようと思ったのですが、このプログラムからは難しいですか?
これまではそんなに苦も無く出来たのですが、いくらやっても表示が出来ません・・・
よろしくお願いします

お礼日時:2018/11/10 08:38

(元の並び順、値)という形でデータを保持するクラスを作り、


(1,3),(2,1),(3,8)
という配列を作って
値でクラスのインスタンスをソートする。
ソートの比較にはComparatorインターフェースを使う。

初心者に難しいのはComparatorインターフェースの実装に
無名の内部クラス使うところですかね。
最初はComparatorインターフェースを普通のクラスとして実装して
普通にインスタンス化しても良いです。
    • good
    • 1
この回答へのお礼

キーボードからテキストに入力した数字を。番号もソートも個別にGUIに表示しようとしているのですが、なかなか頭が回りません・・・
簡単そうで難しいですね。

お礼日時:2018/11/10 09:24

Arrays.sort + Comparatorを使う




String[] array = {"x", "a", "b", "3", "1"};
Arrays.sort(array, new Comparator<String>() {
@Override
public int compare(String obj0, String obj1) {
return obj0.compareTo(obj1);
}
});
for (String string : array) {
System.out.println(string);

ソートはプログラムを製作してうえで避けては通れない分野なので完全に理解してください。
上記の方法ですとソートの動きを理解できず、配列、変数、判定のやり方など曖昧のまま進んでしまい多と後大変苦労するとおもいます。 プログラムの基本があまり理解できない人にはおすすめできません。

基本的なやり方を理解した方が、後々色々の箇所で役に立ちます。ここはじっくりと腰を落ち着いてチャートなど紙の上での分析を書いて理解して解析してください。

あまり根を詰めづに休憩を取りながら頑張ってみてください。

int a[] = {66,12,10,43,45,52,73,65,2,39,97,76,83,11,57,63};
// aの内容を表示
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();



// 先頭から順に隣接する逆順要素を交換する
for (int i = 1; i < a.length; i++) {
if (a[i-1] > a[i]) {
// a[i]とa[i-1]を交換
int w = a[i];
a[i] = a[i-1];
a[i-1] = w;
}
}
// aの内容を表示
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
    • good
    • 1
この回答へのお礼

なんとなく分かってきたけど、やっぱ難しいですね・・・
要するに、ソートさせるときも順番に比較していくわけだから、ソートの順番が決まったところで、そのソートされた数字には、カウントされた数が番号として付く・・・ってことですね?
ソートの仕組みを理解してるようでしてなさそうだから、もう一度見直します。
これからよく考えてみます。

お礼日時:2018/11/09 15:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qjava 始めたばかりです。

いろんなサイトがあるんですけど、文字ばかり見ていても余計に混乱してくるので、簡単なプログラムを作りながら覚えようとしています。

1)GUIを作成。キーボードからA・Bに整数を入力
2)足し算でCに格納。格納場所は5ヶ所。
3)引き算でDに格納。格納場所は5ヶ所。
4)2)の数字の大きいものから順で出力。
5)3)の数字の小さいものから順で出力。

きっとすごく簡単な内容だとは思うのですが、何から手を付けたら良いのかさっぱり分かりません。
とりあえず動かせる環境だけは作りました。
「Hello World」も終わって、GUIのボタン1つのプログラムもコピペですが、こういうものか・・・ぐらいにしか理解出来ていません。
いろんなサイトでふむふむと納得しながら進んではいるんですけど、自分で何か作って見ろと言われても・・・何をすれば良いの?みたいな感じです。
電卓を作るサイトはいくつかあったのですが、難しすぎます。

上記のような簡単だろう内容で覚えて行こうと思うのですが・・・
参考になるようなプログラムを、もしお暇な方がいれば作ってみてもらえないでしょうか?
メモ書き程度で、すぐに作れるような内容じゃないかと思ってるんですけど。
プログラムを理解するためだけで、デザインとか細かいことも必要ないので、よろしくお願いします。
お手上げ状態です。

いろんなサイトがあるんですけど、文字ばかり見ていても余計に混乱してくるので、簡単なプログラムを作りながら覚えようとしています。

1)GUIを作成。キーボードからA・Bに整数を入力
2)足し算でCに格納。格納場所は5ヶ所。
3)引き算でDに格納。格納場所は5ヶ所。
4)2)の数字の大きいものから順で出力。
5)3)の数字の小さいものから順で出力。

きっとすごく簡単な内容だとは思うのですが、何から手を付けたら良いのかさっぱり分かりません。
とりあえず動かせる環境だけは作り...続きを読む

Aベストアンサー

上のコードを利用してつくってみました 
javaのGUI?は部品の配置がややこしいので始めは Visual C#とか Basicで練習した方が解りやすいと思います。
javaは スマートフォンandroid端末の製作言語はこんな感じだよ。

メモ帳とコマンドプロンプトを想定で作りました。


import javax.swing.JFrame;


import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.BorderLayout;

import java.awt.Dimension;
import java.awt.Color;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class grtest extends JFrame {

public static void main(String args[]){
grtest frame = new grtest("タイトル");
frame.setVisible(true);
}

grtest(String title){




setTitle(title);
setBounds(100, 100, 700, 350);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



setLayout(new FlowLayout());
JLabel label = new JLabel();




JPanel p = new JPanel(); //--------パネルみたい 
p.setPreferredSize(new Dimension(500, 300));
p.setBackground(Color.ORANGE);

JTextField text1 = new JTextField("", 10);
JTextField text2 = new JTextField("", 10);

JButton button = new JButton("取得");

button.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){

int a,b,c;

String tx1=text1.getText(); //----JTextFieldをSteing形式に変換
String tx2=text2.getText(); //----JTextFieldをSteing形式に変換

String tx3;

a=Integer.parseInt(tx1);//--文字列を数字に変換
b=Integer.parseInt(tx2);//--文字列を数字に変換

c=a+b;
tx3=String.valueOf(c);

label.setText(tx1+" + "+tx2+" = "+tx3+"です。");

}
}
);



label.setText("たしざん");


p.add(text1);
p.add(text2);
p.add(label);
p.add(labe2);

p.add(button);

Container contentPane = getContentPane();
contentPane.add(p);
}
}

上のコードを利用してつくってみました 
javaのGUI?は部品の配置がややこしいので始めは Visual C#とか Basicで練習した方が解りやすいと思います。
javaは スマートフォンandroid端末の製作言語はこんな感じだよ。

メモ帳とコマンドプロンプトを想定で作りました。


import javax.swing.JFrame;


import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.BorderLayout;

import java.awt.Dimension...続きを読む

Qjava 始めたばかりです

前回の質問から、ソートまで進みました。
足し算のプログラムの結果(2つしかありませんけど)、昇順にしたいと思います。
どの位置にプログラムを追加すれば良いんでしょうか?
なかなか思うように動かないので、よろしくお願いします。

package sample;

/*
additionクラス
キーボード2つの数字を入力後、その足し算結果を返す
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class addition
{
//mainメソッドが初めに呼ばれる
public static void main(String args[]) throws IOException
{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.print("aを入力してください:");
String str1 = br.readLine();
System.out.print("bを入力してください:");
String str2 = br.readLine();
System.out.print("cを入力してください:");
String str3 = br.readLine();

int a = Integer.parseInt(str1);
int b = Integer.parseInt(str2);
int c = Integer.parseInt(str3);

System.out.println("aは"+ a + "です"); //変数aの中身を表示
System.out.println("bは"+ b + "です"); //変数bの中身を表示
System.out.println("cは"+ c + "です"); //変数cの中身を表示

int d; //結果を入れる変数
int e; //結果を入れる変数
d = a+b; //演算して代入
e = a+c; //演算して代入

System.out.println(a + "+" + b +"=" + d +"です" );
System.out.println(a + "+" + b +"=" + e +"です" );



}
}

前回の質問から、ソートまで進みました。
足し算のプログラムの結果(2つしかありませんけど)、昇順にしたいと思います。
どの位置にプログラムを追加すれば良いんでしょうか?
なかなか思うように動かないので、よろしくお願いします。

package sample;

/*
additionクラス
キーボード2つの数字を入力後、その足し算結果を返す
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class addition
{
//mainメソッドが初めに呼ばれる
publ...続きを読む

Aベストアンサー

文字数オーバーしますので これで理解してください。
   /**
* This method initializes jTextField3
*
* @return javax.swing.JTextField
*/
private JTextField getJTextField3() {
if (jTextField3 == null) {
jTextField3 = new JTextField();
jTextField3.setBounds(new Rectangle(122, 175, 184, 27));
jTextField3.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent e) {
System.out.println("jTextField3");

String str = jTextField1.getText();
int a = Integer.parseInt(str);
str = jTextField2.getText();
int b = Integer.parseInt(str);
int c=a+b;
str=Integer.toString(c);
jTextField3.setText(str);
jTextField1.requestFocus();

}
});
}
return jTextField3;
}

文字数オーバーしますので これで理解してください。
   /**
* This method initializes jTextField3
*
* @return javax.swing.JTextField
*/
private JTextField getJTextField3() {
if (jTextField3 == null) {
jTextField3 = new JTextField();
jTextField3.setBounds(new Rectangle(122, 175, 184, 27));
jTextField3.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent e) {
System.out.println("jTextField3");

...続きを読む

QJAVA コンソールではなくGUIで・・・

コンソールでの結果が正しければ、その後GUIで表示されます。
GUIを表示させてから、数字の入力が出来る方法を教えてください。
よろしくお願いします。

import java.awt.EventQueue;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

public class Text extends JFrame {

private JPanel contentPane;
private JTextField textField;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Text frame = new Text();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Text() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "ooo", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel.setBounds(66, 48, 280, 147);
contentPane.add(panel);
panel.setLayout(null);

textField = new JTextField();
textField.setBounds(83, 52, 96, 19);
panel.add(textField);
textField.setColumns(10);


{

String str;
int num;
int max;

max = 2;

Scanner stdin = new Scanner(System.in);

System.out.print("桁数を指定してください");
max = stdin.nextInt();

while(true){
System.out.print("指定桁数以内の数値を入力してください");
str = stdin.next();
num = Integer.parseInt(str);

if (str.length() <= max){
break;
}
}

textField.setText("【"+num + "】");

System.out.print("入力値" + str + " (" + num + ")");

}
}

コンソールでの結果が正しければ、その後GUIで表示されます。
GUIを表示させてから、数字の入力が出来る方法を教えてください。
よろしくお願いします。

import java.awt.EventQueue;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

public class Text extends JFrame {

private JPanel conte...続きを読む

Aベストアンサー

システムによってJavaのデフォルト・フォントのサイズが違う可能性があるので、本来ならフレーム、パネル、テキスト・フィールド、ボタンなどのGUIコンポーネントは固定値で設定すべきではありません(テキスト用GUIコンポーネントに限りgetPreferredSize()を使う事で現在のフォント・サイズを元に算出されるGUIコンポーネント・サイズ(Java推奨値)を取得できます)。
もちろん、Javaの勉強程度なら固定値で設定しても良いでしょうが。

Java GUIデモ(Check)
http://ashtarte.pa.land.to/utf8/smt.cgi?r+sara/&bid+0000011F&tsn+0000011F&bts+2018/11/06%2022%3A31%3A06&

QNullPointerException

以下のソースで、
NullPointerExceptionが出ます。
(202行目)
解決策がわかりません涙

どなたかわかる方いらっしゃいませんか?
https://pastebin.com/UV9TN4Sh

Aベストアンサー

> 710行目(https://pastebin.com/UV9TN4Sh
> )の
> wrkPassDto.setCheckResult(checkResult);
>
> ここに着目してみろと言われたのですが、ここからなにがわかりますか?

教えてくれる人がいるなら直接聞いたらいかがですか?
ここからなにがわかるかって、それをちゃんと自分で考えるように促されたのではないのですか?

特定の1クラスだけ見せられて、業務の仕組みも何がしたいかも分からない赤の他人に聞くことじゃありませんね。

710行目はInsertWorkData()内で、データ登録用のメソッドですよね。
私が見せられたロジックだけ見たら、今回発生している箇所との関係性はありません。

教えてくれてる人が言っているのは、こういうこと言ってるんじゃないんですか?
 ・登録(InsertWorkData())でcheckResultには必ず数字が入ってDB登録されなければならない仕様。
 ・よって、検索(handleSearch())でcheckResultを得た時、nullになりえない。
 ・としたら、登録(InsertWorkData())でcheckResultがnullで登録されていることがおかしい。
  登録(InsertWorkData())の呼出元に問題があるのではないか。

まあ仮にそうだとしたら、DB設計上、Not NULL制約がないのもどうかと思いますし、その時に問題視していたのは、202行目で例外になることではなく、登録処理の単体テスト的に、checkResult項目の結果がNG出してる、ということ。

仕事でやってて、教えてくれる人がいるのならば、こんなとこで質問してないで、ちゃんと自分で考えて、考えた結果をその方に質問してを繰り返して、社内で消化しましょうね。

> 710行目(https://pastebin.com/UV9TN4Sh
> )の
> wrkPassDto.setCheckResult(checkResult);
>
> ここに着目してみろと言われたのですが、ここからなにがわかりますか?

教えてくれる人がいるなら直接聞いたらいかがですか?
ここからなにがわかるかって、それをちゃんと自分で考えるように促されたのではないのですか?

特定の1クラスだけ見せられて、業務の仕組みも何がしたいかも分からない赤の他人に聞くことじゃありませんね。

710行目はInsertWorkData()内で、データ登録用のメソッドですよね。
私が...続きを読む

Qjavaプログラムの解決方法を教えてください

プログラム初心者です。
以下のプログラムで、Heroに剣を所持させたいのですが、エラーが出てしまいます。
どのようにすればよいか解決方法を教えてください。
よろしくお願いします!

class Main------------------------------------------------------------
package samplegame;

public class Main {
public static void main(String[] args) {
Hero h = new Hero();
h.setName("勇者");
h.setHp(100);
Sword s = new Sword();
s.setName("剣");
s.setDamage(10);
h.setSword(s.getName());

System.out.println(h.getName() + "のHPは" + h.getHp());
System.out.println(h.getName() + "の今の武器は" + s.getName());
h.attack();
}

}
-------------------------------------------------------------------------------
Hero class-------------------------------------------------------------------
ackage samplegame;

public class Hero {
private int hp;
private String name;
private Sword sword;


public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public Sword getSword() {
return this.sword;
}

public void setSword(Sword sword) {
this.sword = sword;
}

public int getHp() {
return this.hp;
}

public void setHp(int hp) {
this.hp = hp;
}

public void attack(){
System.out.print(this.name + "は" + this.getSword() + "を振るった");
}
}
------------------------------------------------------------------------------------
Sword class-----------------------------------------------------------------------
package samplegame;

public class Sword {
private int damage;
private String name;

public String getName(){
return this.name =name;
}

public void setName(String name) {
this.name = name;
}

public int getDamage(){
return this.damage =damage;
}

public void setDamage(int damage) {
this.damage = damage;
}

}
-----------------------------------------------------------------------------------

プログラム初心者です。
以下のプログラムで、Heroに剣を所持させたいのですが、エラーが出てしまいます。
どのようにすればよいか解決方法を教えてください。
よろしくお願いします!

class Main------------------------------------------------------------
package samplegame;

public class Main {
public static void main(String[] args) {
Hero h = new Hero();
h.setName("勇者");
h.setHp(100);
Sword s = new Sword();
s.setName("剣");
s.setDamage(10);
h.setSwor...続きを読む

Aベストアンサー

>No.1 回答者: amanojaku6

>h.setSword(s.getName());

↑とりあえず

h.setSword(s);

↑このように修正すればコンパイル・エラーは消えますが、実行上・問題が発生するようです。



「class Hero」の「attack()」内の修正が必要です

>System.out.print(this.name + "は" + this.getSword() + "を振るった");

↑下記のように修正して下さい。

System.out.print(this.name + "は" + this.getSword().getName() + "を振るった");

Qこのプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたの

このプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたのですが、よろしければ教えてください

Aベストアンサー

No.1です、
念のための追加です。

日本語で「〇〇の値が××だったら、、、。そうでなかったら~。」といった表現で書かれたものが多くのプログラミング言語ではifを用いた処理になります。
同じく「〇〇の値が××になるまで、、、を繰り返す。」といった表現で書かれたものfor文やwhile文を用いた処理になります。

参考まで。

Qc言語 立方根

プログラムは全くの初心者です。
数学をしていて級数の計算(収束が遅いので)をするために必要最低限だけ覚えようとしました。

c言語で立方根の計算をしたくてnの立方根を出すときに
n=;\\任意の数
t=pow(n,1/3);
printf("%f",t);
でしました。が、試しにn=2でした時1.000…と小数点以下が切り下げ?四捨五入?されています。そのままの値を返す方法が知りたいです。
簡単な質問ですが、すいません。
回答お願いしますm(._.)m

Aベストアンサー

1 / 3 は0ですよ。C言語の基本の基本です(^-^;

プログラム初心者ではしょうがないかもしれませんが
数学の数式とCの数式は別物。
最初は、演算に対して、演算の入力、演算結果の「型」を強く意識して
「式」を覚えるのが肝要です。

Qnewの追加

c++ですがMFC使いません。
メモリー確保でnewを1度設定した後、不足した場合、追加する方法を教えてください。
このとき、メモリーの既存のデータを残したいです。
いったんdeleteして同名の変数名でnewすると既存のデータは、どんな条件でも残りますか?
また、異なる変数名のnewを新設してデータのコピーはしません、理由はデータサイズがギガ単位だからです。
以上よろしくお願いします。

Aベストアンサー

既存のメモリ―マネージャを使って、コピーせずにメモリーサイズを
大きくするのは無理です。どんなに小さなメモリでも、そのすぐ後の
メモリ空間が空いているという保証は無いし、多くの場合、
空いてません。

もしやるなら、windowsならグローバルなnewやクラスのnewを実装して
virtualallocでメモリ空間を先に確保する工夫を入れるしか無いでしょう。

それ以前に連続メモリの伸長が必要なデータ構造をなんとかすべきとは
思いますが・・・・

QC#のOutOfMemoryException発生要因について

C#でOutOfMemoryExceptionは発生するのは、いくつかサイトを見てみたところ、仮想メモリ不足と考えています。
物理メモリ不足でも起こるものなのでしょうか?

Aベストアンサー

アプリケーションから認識できるのは仮想メモリだけなので、物理メモリの不足が直接OutOfMemoryExceptionを引き起こすことはありません。ただし、物理メモリの不足は仮想メモリ不足の原因になり得ます。

よく、仮想メモリ=ページファイルのような書き方をしているサイトがありますが、これは厳密には間違いです。

この辺りの説明を一通り理解すれば、こんな質問はしなくなるでしょう。

 https://ja.wikipedia.org/wiki/仮想記憶

Qc言語の課題がわかりません

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください。プログラムの途中経過と実行例を記しておきます。
#include<stdio.h>
int main(){
int x;
char a[256],b[256];

printf("Select Mode 1.Encryption, 2.Decryption :");
scanf("%d",&x);
if(a==1){
printf("Input passphrase :");
scanf("%s",a);
printf("Input key:");
scanf("%d",b);
}else{
printf("Input key:");
scanf("%d",b);

}

if(a==3){
printf("Invalid value\n");
}
return 0;
}
<実行例 1>
Select Mode 1.Encryption, 2.Decryption : 1
Input passphrase : password
Input key : $
TEWWSKV@
<実行例 2>
Select Mode 1.Encryption, 2.Decryption : 2
Input key : $
Code : TEWWSKV@
Decode : password
<実行例 3>
Select Mode 1.Encryption, 2.Decryption : 3
Invalid value

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください...続きを読む

Aベストアンサー

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

#include<stdio.h>
#include<string.h>

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf("Input passphrase : ");
scanf("%s", a);

printf("Input key: ");
scanf("%s", b);

} else if (x == 2) {
printf("Input key: ");
scanf("%s", b);

printf("Code : ");
scanf("%s", a);

printf("Decode : ");

} else {
printf("Invalid value\n");
return 0;
}

for (unsigned int i = 0; i < strlen(a); i++) {
r[i] = a[i] ^ b[0];
}

printf("%s\n", r);

return 0;
}

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

#include<stdio.h>
#include<string.h>

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf(...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング