1. string s中的单个字符范围为‘0’-‘9’。其中单个字符为char类型,即string中是s[i](0-9)转换为int类型只需s[i]-'0'即可。
2. string s中的连续字符均为‘0’-‘9’。连续字符表示形式为string类型。
string s1=s.substr(i,j);//其中i表示s中的起始位置(从0开始),j表示子串s1的长度。
如何将子串s1转换为int类型?
const char *ch=s1.c_str();
int x=atoi(ch);//x即为s1转换为整型的结果。
代码:
#include<iostream>
#include<typeinfo>
using namespace std;
int main()
{
string s;
cout << "输入s:"; getline(cin, s);
cout << "s的数据类型:" << typeid(s).name() << endl;
const char* ch = s.c_str();
int x=atoi(ch);
cout <<"输出x:"<< x<<endl;
cout << "x的数据类型:" << typeid(x).name();
return 0;
}
输入输出实例展示:
字符串与数字之间的转换参考链接:https://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html
https://www.jb51.net/article/179788.htm
所以:输入任意字符串,将其中的数字(连续数字视为大于等于10的一个数)提取出来呢。
整体代码如下
#include <iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> Extract_num_of_String(string input)
{
int n = input.size();
vector<int> a;
int i = 0, j;
while (i < n)
{
j = i + 1;
if (isdigit(input[i]))
{
if (j < n && (!isdigit(input[j])))
{
//cout << input[i] << endl;
a.push_back(input[i] - '0');
++i;
}
else if (isdigit(input[j]) && j < n)
{
while (isdigit(input[j]) && j < n)
{
++j;
}
int in;
in = atoi((input.substr(i, j - i)).c_str());
a.push_back(in);
i = j + 1;
}
}
else
++i;
}
return a;
}
int main()
{
string s; getline(cin, s);
vector<int> v = Extract_num_of_String(s);
for (int k = 0; k < v.size(); ++k)
{
cout << v[k];
if (k < v.size() - 1)
cout << " ";
}
cout << endl;
return 0;
}
输入输出实例展示如下: