std :: string中的数字
Digits in std::string
您可以帮助我在字符串中找到数字而不使用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]);
}
我知道这将在矢量中存储3 6和5的数字,而不是数字365。但是我不明白为什么我的时循环不起作用。
您正在通过序列循环,并将元素复制到另一个容器。标准库具有专门用于此任务的std::copy_if
算法。
std::string s{ "A year has 365 days" };
std::vector<char> v;
std::copy_if(s.begin(), s.end(), std::back_inserter(v), ::isdigit);
如果您坚持不使用isdigit
,则可以提供自己的谓词(此示例中的lambda(。
std::copy_if(s.begin(), s.end(), std::back_inserter(v),
[](char ch) { return '0' <= ch && ch <= '9'; }
);
如果我正确理解您,您只想存储数字?如果是这样,也许您正在寻找这样的东西:
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]);
}
}
在这里,我使用的是48至57(数字字符(之间的ASCII值,如果当前字符是数字,则使用。如果条件为真,则使用时循环将使您进入无限循环。这意味着一旦您的迭代达到" 3",它将继续坐在循环中。因此,您的向量将永远呼叫push_back,因为满足了当前状态,并且没有基本案例可以突破时循环。
编辑:该代码有两个我最初没有捕获的错误。首先,向量应为vector<char>
,而不是vector<string>
。其次,我注意到条件不应是i < s.length()-1
,应该是i < s.length()
。我最初键入的方式跳过了循环中的最后一个索引,并且可以与给定的字符串一起使用,但是如果从字符串中取出" days" ,它将仅打印36
。以下代码已调整以确保可读性,并已编译以确保其有效:
// Example program
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string s = "A year is 365";
vector<char> nums;
int length = s.length();
for(int i = 0; i < length; i++) {
if (s[i] >= '0' && s[i] <= '9') {
nums.push_back(s[i]);
cout << s[i];
}
}
}
为什么我不能这样做这样的事情:
for (int i=0; i<s.size(); i++){ while (s[i]>='0' && s[i]<='9') v[i].push_back(s[i]); }
如果条件是true
,该程序将永远执行while
语句。您需要使用while
的if
fnstead。
for (int i=0; i<s.size(); i++)
{
if (s[i]>='0' && s[i]<='9')
{
v[i].push_back(s[i]);
}
}
std::string str {"A year has 365 days"};
std::vector<char> vec;
for(const char c: str)
{
if (c>='0' && c<='9')
{
vec.push_back(c);
}
}
相关文章:
- C++ 从 std::string 中删除所有非数字字符
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- 正则表达式,包含名称 + "string" + 数字,没有其他内容
- 如何使用 c++ 中的 int* count(const string&s)计算字符串中每个数字的出现次数?
- std :: string中的数字
- 遍历 std::string 时如何获取没有数字的字符?
- String.length() 或 String.size() 返回带有 "x" (\x5) 的数字
- 我可以读取向量<string>::迭代器的数字位置吗?
- 数字为std :: string或double
- 现在允许为 std::string 分配一个数字
- 从包含十六进制数字的std::string或QString创建std::bitset或QBitArray
- 声明一个类型为String的数组,该数组包含带填充的数字
- String Stream in C++ 解析单词和数字字符串
- C++ 标准::设置<string>字母数字自定义比较器
- String.at() 返回时髦的数字
- 如何将 std::string 中的所有非字母字符(数字和特殊字符)替换为空格
- 在 C++ STL 中,如何使用 regex_replace 从 std::string 中删除非数字字符
- 解析 std::string 中的两个或一个数字
- <string> 设置像数字一样的排序
- string控制字符:将十六进制数字赋给字符串