cppとjavaを比較しながら、よくある処理をまとめます。
文字列操作系
文字列操作に便利なtips。
文字列操作するときに、Stringクラスのメソッドを使用するか、Stringをchar[]型に変換して操作するかをパッと見極めて処理書くためのtips。
文字列String
の読み取り
Scanner sc = new Scanner(System.in);
String str = sc.next();
文字char
の読み取り
Scanner sc = new Scanner(System.in);
char c = sc.next().charAt(0);
文字操作
特定の条件で文字を置き換えたりする場合。
インデックス指定での置き換えはchar[]
に変換するのが便利。
文字列String
を文字配列char[]
に変換
String S = sc.next();
char[] charArray = S.toCharArray();
文字配列char[]
を文字String
に変換
String str = String.valueOf(charArray);
置き換え
インデックスi番目を特定文字で置き換え
charArray[i] = c
例題
アルファベットテーブル
for(char c = 'A';c <= 'Z';c++){
System.out.print(c);
}
output
ABCDEFGHIJKLMNOPQRSTUVWXYZ
例題
アルファベットテーブルで変換表を作る系。
https://atcoder.jp/contests/abc342/tasks/abc342_c
可変長配列系
基本操作系: ArrayList<E>
cppだとvector<>
、javaはArrayList
。vector<>
でも良い。
- 参照
このリスト内の指定された位置にある要素を返します。
E get(int index)
- 変更
このリストの指定された位置にある要素を、指定された要素で置き換えます。
E set(int index, E element)
- 包含
指定の要素がこのリストに含まれている場合にtrueを返します。
boolean contains(Object o)
- 削除
このリストの指定された位置にある要素を削除します
boolean remove(int index)
- 削除
指定された要素がこのリストにあれば、その最初のものをリストから削除します。
remove(Object o)
末尾の参照と変更: LinkedList<E>
LinkedListはi番目の参照が遅い。が、stack的な操作ができたり割と便利な面はある。
- 末尾参照
このリスト内の最後の要素を返します。
E getLast()
- 末尾に追加
このリストの最後に、指定された要素を追加します。
void addLast(E e)
- 値の代入
このリストの指定された位置にある要素を、指定された要素で置き換えます
E set(int index, E element)
- stack:pop
このリストが表すスタックから要素をポップします。
E pop()
- stack:push
このリストが表すスタック上に要素をプッシュします。
void push(E e)
cppとjavaの比較
cppの場合、配列のサイズ3。初期値100の配列は次で書ける。
vector<int> a = vector<int>(3, 100);
a[2] = 777;
for(int val:a){
cout << val << endl;
}
100
100
777
javaの場合、cppのようにサイズで初期化して、指定した値で初期化ができない。初期化すると要素は0が割り当てられる。
(調べ中)
ArrayList<integer> a = new ArrayList<integer>;
// a[2] = 777; // error
// Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 0
// a.set( 2, 777);
a.add(100);
a.add(100);
a.add(100);
a.set(2, 777)
for (Integer val: a) {
System.out.println(val);
}
100
100
777
int型配列を使用。
int num = 3
int[] num = new int[num];
num[2] = 5;
for (int i : num) {
System.out.println(i);
}
0
0
5
備考
Python、C++、Javaで考えるデータ構造と計算量の話