文字列と数値の変換を実行するには、さまざまな方法があります。
1.文字列独自の関数を使用する
数値から文字列へ: to_string()
文字列から数値へ: stoi()、stol()、stof()、stod() など。
例:
int i = 42;
string s = to_string(i);
double d = stod(s);
文字列を数値に変換する各関数では、文字列内のどの位置から変換を開始するかを選択することもでき、整数に変換するときに異なる基数を選択することもできます。詳細については、『C++入門』の 328 ページを参照してください。
2.文字列ストリームを使用する
まず、sstream ヘッダー ファイルをインクルードする必要があります。このクラスは iostream から継承し、文字列データの読み取りと書き込みが可能です。
stringstream を介して、文字列と数値を相互に直接変換できます。
例:
//数字转字符串
int num = 12;
string s;
stringstream strs;
strs << num;
strs >> s; //s = “12”
//字符串转数字
string s = "123";
int num;
stringstream strs;
strs << s;
strs >> num; //num = 123
ここでの文字列型はstringだけでなくchar[]も可能です。もちろん、C++ では、文字列やベクトルなどのコンテナーを使用できる場合は配列を使用せず、イテレーターを使用できる場合は通常のポインターを使用しないことを推奨しています。
3. sprintf、sscanfを使用する
include<stdio.h> が必要です
// 数字转字符串
sprintf(str, “%d”, num);
// 字符串转数字
sscanf(str, “%d”, &rsl);
次の例のように、文字列と数値を相互に変換することで、データを処理し、より柔軟に問題を解決できます。
1 ~ n の範囲内で 2、0、1、9 の数字を含む数字の数を見つけ、それらの合計を計算します。
#include <string>
#include <iostream>
using namespace std;
int n, num = 0, sum = 0;
string s;
string numbers("2019");
int main()
{
cin >> n;
for (int i = 1; i <= n; ++i)
{
// 将数字转化为string
s = to_string(i);
// find_first_of()可以查找numbers中任意一个字符在s中第一次出现的位置
if (s.find_first_of(numbers) != string::npos) {
sum += i;
++num;
}
}
cout << "1-" << n << "范围内包含2、0、1、9的数字共有"
<< num << "个," << "其和为:" << sum << endl;
return 0;
}