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

C言語でstring.hとループを使わずに文字列の長さを求める方法

この記事では、C言語においてstring.hヘッダーファイルとループを使わずに文字列の長さを求める方法を解説します。文字列の長さを取得する問題は、string.hを使わなくても非常に簡単に解決できます。一般的には再帰関数を利用する手法が知られていますが、今回は再帰を使わない別のテクニックを紹介します。

その鍵となるのがprintf()関数の戻り値です。printf()関数は、実際に出力した文字数を返り値として返します。この性質を利用すれば、文字列をprintf()で出力するだけで、その文字数、すなわち文字列の長さを簡単に取得できるのです。

サンプルコード

#include<stdio.h>
main() {
   char* my_str = "This is a String";
   printf("The string is: ");
   int length = printf("%s", my_str);
   printf("\nThe length of string is: %d", length);
}

実行結果

The string is: This is a String
The length of string is: 16

コードの解説

このプログラムのポイントは、int length = printf("%s", my_str);の部分です。printf()関数は文字列「This is a String」を出力すると同時に、出力した文字数である「16」を戻り値として返します。その値を変数lengthに格納することで、strlen()関数やループ処理を使うことなく、文字列の長さを取得できています。

なお、この手法は簡潔で便利な反面、実際の出力を伴うため、単純に長さだけが必要な場面では標準ライブラリのstrlen()を使う方が効率的です。しかし、printf()の戻り値の仕組みを理解する良い例として、覚えておくと役立ちます。

  1. C++で連結リストのループ(循環部分)の長さを求める方法

    この記事では、ループ(循環)を含む可能性がある連結リストが与えられたときに、そのループの長さ(ループ内のノード数)を求める方法を解説します。 問題の概要 与えられた連結リストにループが存在する場合は、ループを構成するノードの数を数えて返します。ループが存在しない場合は -1 を返します。 具体例を見てみましょう。 入力: 連結リスト:1 → 2 → 3 → 4 → 5 → 6 → 7 → 2(ノード2に戻る) 出力: 6 この例では、ノード7の次がノード2に接続されており、ノード2からノード7までの6個のノードがループを形成しています。 解決アプローチ:フロイドの循環検出法 まず、連結リス

  2. Windows 10で絵文字を使う方法|ショートカットキー・タッチキーボード・コピー&ペーストを徹底解説

    中国語、スペイン語、英語――世界で最も話されている言語は数多くありますが、すべての人をつなぐ言語はひとつしかありません。それが「絵文字」です。普段はスマートフォンで使っている人がほとんどですが、実はデスクトップPCでも問題なく活用できます。その理由は、Windows 10に絵文字機能が標準搭載されているから。もう言葉だけで表現する必要はありません。ナスの絵文字も、カエルの顔も、かぼちゃも、簡単に挿入できるのです。この記事では、Windows 10で絵文字を有効化して使う方法を詳しく解説します。Windowsにおける絵文字の歴史「絵文字」は文字通り「絵」を意味する「文字」で、1990年代後半に日