C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で「Happy Birthday」を出力するプログラム

本記事では、C++を使って「Happy Birthday」という文字列を出力するプログラムを紹介します。このプログラムは、ASCIIコードの性質を利用したちょっとしたトリックを使ったユニークな手法が特徴です。

アルゴリズム

開始
    出力したい各文字の「1つ前の文字」からなる文字列str1を用意する(例:「H」なら「G」、「a」なら「`」)。
    文字列の先頭アドレスをポインタpに代入する。
    *pがNULL('\0')でない間、whileループを繰り返す。
        現在の文字をインクリメント(+1)して目的の文字へ変換し、ポインタを次の位置へ進める。
    変換後の文字列を出力する。
終了

仕組みのポイント

このプログラムの鍵となるのは ++*p++ という式です。動作は以下の通りです。

  • *p … ポインタpが現在指している文字を参照します。
  • ++*p … その文字のASCIIコードを1増やします(例:「G」→「H」)。
  • p++ … 処理のあとにポインタを次の文字位置へ移動させます。

つまり、あらかじめ「1つずれた文字列」を用意しておき、各文字を先頭から順番に1ずつ増やしていくことで、正しい文字列「HappyBirthday」が組み上がります。ループは文字列の終端を示すNULL文字('\0')に到達した時点で終了します。

サンプルコード

#include<iostream>
using namespace std;

int main(){
    char str[]="G`ooxAhqsgc`x",*p;
    p=str;
    while(*p!='\0')
        ++*p++;
    cout<<str;
}

実行結果

HappyBirthday

文字列「G`ooxAhqsgc`x」の各文字に1を加えると、それぞれ「H」「a」「p」「p」「y」「B」「i」「r」「t」「h」「d」「a」「y」となり、結果として「HappyBirthday」が出力されます。ASCIIコード上で英字や記号が連続して並んでいることを利用した、シンプルながら面白いテクニックと言えるでしょう。

  1. C++でローリングハッシュを実装する方法|Rabin-Karp法による文字列検索を解説

    ローリングハッシュとは ローリングハッシュ(転がりハッシュ)とは、入力データ上を移動するウィンドウ(窓)ごとにハッシュ値を計算できるハッシュ関数のことです。ウィンドウが1文字分ずれたときも、ハッシュ全体を最初から計算し直すのではなく、前回の値から効率よく更新できる点が最大の特徴です。 Rabin-Karp法との関係 ローリングハッシュの最も有名な応用例が、Rabin-Karp(ラビン・カープ)文字列検索アルゴリズムです。RabinとKarpが提案したローリングハッシュ関数は整数値を計算し、文字列に対しては「その文字列を数値として表現した値」を返します。 Rabin–Karp法の解説では、乗算

  2. C++で文字列の各文字をループ処理する方法

    この記事では、C++で文字列内の各文字を1つずつ取り出して処理する方法を解説します。文字列のすべての文字をループ処理するには、インデックス0から「文字列の長さ − 1」まで繰り返すfor文を使用します。各位置の文字へのアクセスには、添字演算子「[ ]」またはstringオブジェクトのat()関数のいずれかを使えます。入力と出力入力: 文字列 Hello World 出力: Hello Worldアルゴリズムステップ1: 処理対象の文字列を用意する ステップ2: インデックスiを0から文字列の長さ−1まで順に進める ステップ3: i番目の文字を取得して出力し、全文字に対して繰り返すサンプルコード