输入任意字符串,将其中的数字(连续数字视为大于等于10的一个数)提取出来。

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;
}

输入输出实例展示如下: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值