C++中假设有一个string里有几个数字,怎么把特定数字提取出来

假设有这么一个字符串:"s2hhhdd63d9"这里总共有三个数字,怎么指定提取某一特定数字?

用string的迭代器来遍历这个字符串中的每个字符,如果是指定的数字那么就取出来,如果不是把迭代器++ 指向下一个。追问

举例一下好么。。

追答

string s("23jsdlk1");
char c;
for (string::iterator s_iter=s.begin();s_iter!=s.end();++s_iter)
{
c=*s_iter;
if (c=='1')
{
cout <<c <<endl;
}
}
比如这样 我要找1 这就取出来了 你可以运行下这段代码

追问

那如果预先不知道哪是什么书不就没用了

追答

不是啊 你自己不是想取特定数字么???如果你自己都不知道哪个数字要什么那么你取什么数字 这么多数字取出来的连你自己都不知道是不是要的了 那有什么意义?

追问

特定数字的意思不是这个,sorry,不是有3个数字么,我的特定数字的意思是提取第一个数字或后一个数字的意思。sorry,没讲清。

追答

哦,那很简单啊 加1个计数器 从头开始遍历 如果是数字,那么计数器加1 你想要第几个数字 这样就可以随便提取第几个数字了
string s("23jsdlk1");
char c;
int count=0;
int need;
cin>>need;
for (string::iterator s_iter=s.begin();s_iter!=s.end();++s_iter)
{
c=*s_iter;
if (isdigit(c))
count++;
if (count==need)
coutcount)
throw new exception("Cant'find the number");
}
这样就是你输入你要提取第几个数字,然后把相应的数字数出来,如果比如只要3个数字,你输入的是第4个,那么就会出现异常,如果你想需要最后1个数字,那么稍微在加一句也可以,看你想做成什么样的

追问

怎么知道那是数字呢?

追答

if (isdigit(c)) 这里用了1个库函数 判断取出来的这个字符是不是数字,是的话这个函数返回true 除此之外这个都是假,证明这个字符不是数字继续判断下面1个字符

追问

最后问一下,如果我想把这个数字变为int值该怎么做?(问了那么久,加高悬赏好了)

追答

因为你的这个数字就是1-9 的字符 所以-48即可 比如你把这个数字保存int值k里面,那么k=c-48 就可以把这个字符c转变为int值k了。 -48是因为0的ASC码是48,所以这样做就可以了,还有其他问题也可以问~如果代码不会写的话 可以把问题描述清楚点我帮你写这个函数哈。

追问

不是很懂,可以解释下吗?假如“5”那么int k=“5”-48为什么k会是5?

追答

不是"5" 而是‘5’ 字符5 字符5的ASCII码是53 如果你直接把int k='5' 那么k的值其实就是这个ASCII的10进制值53 具体的每个字符值是多少你可以再搜一下相关资料 所以这里要-48 即0的ASCII码,这样53-48=5 也就是把'5'变成5了 完成了从字符5到int值5的转化。

追问

谢了(问了怎么多问题,不好意思哈)

追答

没事的,还有什么问题的话 或者代码不会写也可以问,我可以帮你写的哈~ 不好不好意思 以前我学C++的时候也遇到过很多问题的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-08
用find函数找到数字字符的下标,直接提取就可以了追问

举例一下好么。。

追答

你是想提取 63 9
还是 6 3 9

追问

9

追答

什么意思? 我还不知道你想干嘛???

追问

就是从那个字符串中提取出特定数字如9

追答#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void main()
{
    string s="s2hhhdd63d9";
    char n;
    cin>>n;
    string::iterator it =s.begin();
    it=find(it,s.end(),n);
    cout<<*it<<endl;
}

相似回答