C++ std::string中的数字

C++ std::string中的数字,c++,string,c++11,for-loop,while-loop,C++,String,C++11,For Loop,While Loop,你能帮我找到字符串中的数字而不用像isdigit这样的函数吗?我只能用于循环和指针。如果我有 std::string s {"A year has 365 days"} 为什么我不能这样做: for (int i=0; i<s.size(); i++){ while (s[i]>='0' && s[i]<='9) v[i].push_back(s[i]); } for (int i=0; i<s.size(); i++){ while

你能帮我找到字符串中的数字而不用像isdigit这样的函数吗?我只能用于循环和指针。如果我有

std::string s {"A year has 365 days"}
为什么我不能这样做:

for (int i=0; i<s.size(); i++){
    while (s[i]>='0' && s[i]<='9) v[i].push_back(s[i]);
}
for (int i=0; i<s.size(); i++){
    while (s[i]>='0' && s[i]<='9') v[i].push_back(s[i]);
}
for(int i=0;i=0'&s[i]
为什么我不能这样做:

for (int i=0; i<s.size(); i++){
    while (s[i]>='0' && s[i]<='9) v[i].push_back(s[i]);
}
for (int i=0; i<s.size(); i++){
    while (s[i]>='0' && s[i]<='9') v[i].push_back(s[i]);
}
为什么我不能这样做:

for (int i=0; i<s.size(); i++){
    while (s[i]>='0' && s[i]<='9) v[i].push_back(s[i]);
}
for (int i=0; i<s.size(); i++){
    while (s[i]>='0' && s[i]<='9') v[i].push_back(s[i]);
}

如果我理解正确,您希望只存储数字?如果是,那么您可能正在寻找类似以下内容:

 string s = "A year has 365 days";
 vector<string> storedNums = {};

 for(int i = 0; i < (s.length() - 1); i++) {
    if (s[i] >= 48 && s[i] <= 57) {
        storedNums.push_back(s[i]);
    }
}

如果我理解正确,您希望只存储数字?如果是,那么您可能正在寻找类似以下内容:

 string s = "A year has 365 days";
 vector<string> storedNums = {};

 for(int i = 0; i < (s.length() - 1); i++) {
    if (s[i] >= 48 && s[i] <= 57) {
        storedNums.push_back(s[i]);
    }
}
std::string str{“一年有365天”};
std::vec;
for(常量字符c:str)
{
如果(c>='0'&&c
std::string str{“一年有365天”};
std::vec;
for(常量字符c:str)
{

如果(c>='0'&&c您正在一个序列上循环并有条件地将元素复制到另一个容器中。标准库有一个专门用于此任务的算法

std::string s{ "A year has 365 days" };
std::vector<char> v;

std::copy_if(s.begin(), s.end(), std::back_inserter(v), ::isdigit);

您正在一个序列上循环,并有条件地将元素复制到另一个容器中。标准库有一个专门用于此任务的算法

std::string s{ "A year has 365 days" };
std::vector<char> v;

std::copy_if(s.begin(), s.end(), std::back_inserter(v), ::isdigit);


它不起作用,因为循环条件是“它是一个数字”,所以当它是一个数字时,将它添加到
v[i]
。如果字符串不是以数字开头怎么办?但是如果它不是一个数字,它就什么都做不了?我不明白,因为即使我使用它也不起作用。
if(s[i]>=“0”&&s[i]当(s[i]>='0'&&s[i]这段代码将永远循环时,你认为行中的
i
会发生什么情况,而你的while循环中不增加i它不起作用,因为你的循环条件是“它是一个数字”,所以当它是一个数字时,将它添加到
v[i]
。如果字符串不是以数字开头怎么办?但如果它不是数字,它就不会做任何事情?我不明白,因为即使我使用它也不会工作。
如果(s[I]>='0'&&s[I]你认为
I
时(s[I]>='0'&&s[I]会发生什么此代码将永远循环,循环中不增加i,而循环结束条件应为
i。如果字符串为空,当前代码将跳过最后一个字符或做得更坏。即使限制到ASCII也可以,请考虑使用<代码> '0' < /COD>和<代码> '9' <代码>以提高代码的可读性。@ BBYY:是的,我完全同意您的循环结束条件应该是<代码> i>长度()。。如果字符串为空,当前代码将跳过最后一个字符或做得更坏。即使限制到ASCII也可以,请考虑使用<代码> '0' < /COD>和<代码> '9' <代码>,以提高代码的可读性。@博布斯:是的,我完全同意您的观点。您介意详细说明吗?即使发布的代码也可以回答问题,EX。规划可能对其他人有利并增加其价值。首先,我们创建一个字符串对象,将用作测试,然后创建一个存储所有数字的向量。然后for循环在字符串上迭代。检查字符串中的每个字符是否为数字。如果是,则将其添加到向量中。您介意详细说明吗?即使发布的代码可以回答这个问题,解释也可能对其他人有益并增加其价值。首先,我们创建一个字符串对象作为测试,然后创建一个存储所有数字的向量。然后for循环迭代字符串。检查字符串中的每个字符是否为数字。如果是然后它被添加到向量中。我同意,但是OP问题中的“我只能用于循环和指针”确实与C++11标记冲突…我同意,但是OP问题中的“我只能用于循环和指针”确实与C++11标记冲突。。。