我面临的问题如下:
我有一个字符串,其中包含以下固定信息中的信息。
club {
level: 210
league: 128
staff: 1451
salary: 3452600
}
club {
level: 211
league: 121
staff: 1451
salary: 3452600
}
... and many more club {...}
我有很多club
的条目。我希望能够以以下格式从字符串中的所有club
中提取所有数字。
所需的输出:
2101281451345260021112114513452600
我在字符串中有信息,但是我无法理解如何有效地从字符串中删除重复字段,例如level:, league:, staff:, club:, salary:, club {}
。
对于实现这一目标的简单算法,我将不胜感激。
答案 0 :(得分:1)
您无需将数字视为数字,将它们视为字符就足够了。
要检查字符是否为数字,请使用isdigit
:
str = ...;
for (char c: str)
if (isdigit(c))
std::cout << c;
答案 1 :(得分:1)
您可以使用erase-remove idiom:
#include <algorithm>
#include <string>
#include <cctype>
int main()
{
std::string input = "club {"\
"level: 210"\
"league : 128"\
"staff : 1451"\
"salary : 3452600"\
"}";
input.erase(std::remove_if(input.begin(), input.end(), [](char c) { return !std::isdigit(c); }),
input.end());
//string is now "21012814513452600"
return 0;
}
这将从您的字符串中删除所有非数字。
答案 2 :(得分:0)
将数字提取为数字的一种方法:您可以将所有不需要的字符替换为空格,然后使用stringstream
从字符串中获取数字:
std::string str = ...;
std::string temp = str; // avoid overwriting the original string
for (char& c: temp) // '&' gives you permission to change characters
if (!isdigit(c))
c = ' ';
std::stringstream stream(tmp);
int i;
while (stream >> i)
std::cout << i; // print it or do whatever else