C++ STLのbasic_string::c_str関数とは?使い方を解説
C++のSTL(Standard Template Library)に含まれるbasic_stringクラスには、文字列を扱うための便利なメンバ関数が多数用意されています。その中でも
c_str関数とは
c_str()は、C++のSTLライブラリに組み込まれているメソッドで、NULL文字('\0')で終端された文字配列へのポインタを返します。これにより、std::string型の文字列を、C言語スタイルの文字列として扱うことが可能になります。
C言語の関数や、const char* 型の引数を受け取るAPIと連携する際に頻繁に使用される、非常に実用的な関数です。
構文
C++におけるc_str()関数の定義構文は以下の通りです。
const char* c_str() const;
関数の特徴
- 引数なし: このメソッドにはパラメータを渡すことはできません。
- 戻り値: NULL終端された文字配列へのcharポインタ(const char*)を返します。
- 読み取り専用: 返されるポインタはconst修飾されているため、指し示す先の文字列を変更することはできません。
なお、返されたポインタが有効であるのは、元のstringオブジェクトが変更されない間だけである点に注意が必要です。文字列の変更や再割り当てが行われると、ポインタは無効になる可能性があります。
使用例
以下は、c_str()を使って文字列内に特定の文字「P」が含まれているかを確認するサンプルコードです。
#include <bits/stdc++.h>
#include <string>
using namespace std;
int main() {
string s = "I Love Tutorials Point";
int flag = 0;
cout << "Checking if the string " << s << " contains P " << endl;
for (int i = 0; i < s.size(); i++) {
if (s.c_str()[i] == 'P') {
cout << "The string contains character";
flag = 1;
}
}
if (flag == 0) {
cout << "The string does not contain character";
}
}実行結果
Checking if the string I Love Tutorials Point contains P The string contains character
まとめ
c_str()は、std::stringをC言語形式の文字列(NULL終端のchar配列)に変換するためのシンプルかつ強力なメソッドです。C言語の標準関数(printf、strcmpなど)や外部ライブラリとの互換性が必要な場面で活躍します。ただし、返されるポインタの有効範囲には注意し、必要に応じて文字列をコピーしてから使用するのが安全です。
-
C++ STLのacosh()関数の使い方を徹底解説
C++ STLのacosh()関数とはacosh()関数は、引数として与えられた値の逆双曲線余弦(アークハイパボリックコサイン)を返す関数です。C++の標準テンプレートライブラリ(STL)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。acosh()関数の構文acosh(var)構文からわかるように、acosh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。このパラメータには1以上の値を指定する必要があります。関数はvarの逆双曲線余弦を返します。acosh()関数の基本的な使用例以下に、C+
-
C++で文字列内の文字の出現頻度を求めるプログラム
文字列と文字の頻度とは文字列とは、NULL文字(\0)で終端される1次元の文字配列のことです。文字列における「文字の頻度」とは、特定の文字がその文字列の中に何回出現するかを表す数値です。例えば、以下のようになります。文字列: Football is a sport上記の文字列に含まれるアルファベット「o」の頻度は3特定の文字の頻度を求めるプログラム特定のアルファベットの出現回数を求めるプログラムは、以下のとおりです。例#include <iostream>using namespace std;int main() { char str[100]