io パッケージ

 文字列を昇順に表示することはよく行なわれることです。このとき、文字列のソートが必要です。プログラムでは文字列を比較しなければなりません。C言語では文字列を比較する関数としてstrcmp()とstrncmp()が用意されています。

JavaではStringクラスのメソッドcompareTo()が用意されています。用途は同じですが、C言語とは書き方が違います。
文字列str1とstr2を比較する場合、str1.compareTo(str2)と書きます。

 

C言語のプログラム

練習 キーボードから入力した文字列をアルファベット順にして表示

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

void main(void)
{
 char name[3][20];
 char *p_name[3], *p;
 int i, j;

 printf("文字列を3回入力して下さい\n");
 for (i = 0; i < 3; i++) {
  printf("%d:", i + 1);
  scanf("%s", name[i]);
 }

 for (i = 0; i < 3; i++) {
  p_name[i] = name[i];
 }

 for (i = 0; i < 3; i++) {
  for (j = i + 1; j < 3; j++) {
   if (strcmp(p_name[i], p_name[j]) > 0) {
    p = p_name[i];
    p_name[i] = p_name[j];
    p_name[j] = p;
   }
  }
 }

 printf("アルファベット順に表示\n");
 for (i = 0; i < 3; i++) {
  printf("%s\n", p_name[i]);
 }
}




ソートの部分を関数にして書き換えてみよう。


Java言語のプログラム

練習 キーボードから入力した文字列をアルファベット順にして表示

import java.io.*;

class StringSort {
 public static void main(String args[]) {
  String str[] = new String[3];
  int i, j;

  InputStreamReader keyin = new InputStreamReader(System.in);
  BufferedReader buff = new BufferedReader(keyin);

  System.out.println("文字列を3回入力して下さい");
  try {
   for (i = 0; i < str.length; i++) {
    str[i] = buff.readLine();
   }
  } catch (IOException e) {
   System.out.println("文字入力が不正です");
  }

  for (i = 0; i < str.length; i++) {
   for (j = i + 1; j < str.length; j++) {
    if (str[i].compareTo(str[j])>0) {
     String wk = str[i];
     str[i] = str[j];
     str[j] = wk;
    }
   }
  }

  System.out.println("アルファベット順に表示");

  for (i = 0; i < str.length; i++) {
   System.out.println(str[i]);
  }
 }
}

保存ファイル名: StringSort.java
コンパイル: javac StringSort.java
実行: java StringSort


キー入力部分、ソートの部分、結果の表示部分を別々のクラスにして書き換えてみよう。複数のクラスからなるjavaファイルにはpublic修飾子の付くクラスは1つしか許されません。解答例はこちらです。