C++の文字列操作をマスターするための練習問題と解説
文字列(String)はプログラミングにおいて非常に重要な要素です。文字列とは、文字型(char)のデータが連続して並んだ配列のことを指します。GATEなどの競争試験でも頻出テーマの一つであり、確実に理解しておく必要があります。本記事では、まず文字列に関する重要なポイントを整理し、その後、概念の定着に役立つ練習問題をいくつか紹介します。
文字列の格納方法と基本ポイント
C++などのプログラミング言語では、文字列を主に次の2つの方法で扱うことができます。
- 文字配列を使う方法:
char str[size] - ポインタを使う方法:
char *ch = "Hello"のように、文字列リテラルを指すポインタを宣言する
それぞれの使い方に関連して、押さえておきたい重要なポイントは以下の通りです。
- 文字列のサイズを取得するには、
sizeof演算子に文字配列を渡します(例:sizeof(str))。 - 文字列の終端はヌル文字
'\0'で示されます。 - 文字列の長さを求めるには strlen() 関数を使用します。
- 文字列の内容を変更する場合には char 型配列を使用します。一方、ポインタ経由では文字列中の単一の文字に直接アクセスすることはできません。
練習問題
それでは、以下のコードの出力結果を予測してみましょう。
例1
char name[] = "TutorialsPoint"; char *ptr = name; cout<<++ptr;
出力
utorialsPoint
このコードでは、ポインタの値が1だけインクリメントされているため、出力はインデックス1の位置から開始されます。
例2
char name[] = "TutorialsPoint";
int length = strlen(name);
for(int i=length;i>1;i--)
printf("%c", name[i]);
出力
tniopslairot
文字列の長さから1までカウントダウンしながら、文字列を逆順に出力しています。
例3
char c[] = "LearnProgrammingAtTutorialsPoint";
char *p =c;
printf("%s", p + c[1] - c[2]+1) ;
出力
ProgrammingAtTutorialsPoint
この例では、文字列へのポインタを作成し、ポインタの値を特定のインデックス分だけ進めることで、その位置以降の文字列を出力しています。
-
C++で文字列sをtに変換するための最小変更回数を求める
問題の概要 同じ長さを持つ2つの文字列 s と t があり、どちらも小文字の英字のみで構成されているとします。まず文字列 s を任意の順序に自由に並べ替え、その後、s を t と一致させるために必要な最小の文字置換回数を求めます。 例えば、入力が s = eccynue、t = science の場合、答えは 2 になります。これは、eccynue を yccence に並べ替えた後、先頭の y を s に、2番目の c を i に置き換えることで science に変換できるためです。 解決のためのアプローチ この問題の鍵となるのは、並べ替えによって一致させられる文字はできるだけ多く一致
-
C++で2つの2進数文字列を加算するプログラムの書き方
2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁