c++ - 将(例如)12345:12-34 转换为三个整数: (12345, 12, 34) C++ 字符串?
问题描述
将这些分成 3 个整数的最快方法是什么?我觉得这应该是可能的,但我能找到的最接近的是:
#include <ostream>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
std::vector<int> extract_ints(std::string const& input_str)
{
std::vector<int> ints;
std::istringstream input(input_str);
std::string number;
while (std::getline(input, number, ':'))
{
std::istringstream iss(number);
int i;
iss >> i;
ints.push_back(i);
}
return ints;
}
int main()
{
typedef std::vector<int> ints_t;
ints_t const& ints = extract_ints("3254:23-45");
for (ints_t::const_iterator i = ints.begin(), i_end = ints.end(); i != i_end; ++i)
std::cout << *i << std::endl;
return 0;
}
并且实际操作的链接在这里:https://godbolt.org/z/8sP9vvqfv但首先它只会在':'之间分开,不知道如何扩展到':'和'-的也。但其次,这似乎过于复杂......这真的是最好的方法吗?
谢谢
解决方案
如何扩展为':'
您从输入中读取一个字符并检查它是否为:
. 例如:
#include <iostream>
#include <exception>
#include <vector>
#include <sstream>
#include <exception>
std::vector<int> extract_ints(std::string const& input_str)
{
std::vector<int> r(3);
std::istringstream iss(input_str);
char c1;
char c2;
if (!(
iss >> r.at(0) >> c1 >> r.at(1) >> c2 >> r.at(2) &&
c1 == ':' && c2 == '-' &&
!(iss >> c1) // test if we are at EOF
)) {
throw std::runtime_error("Och och, invalid string");
}
return r;
}
int main() {
for (auto&& i : extract_ints("3254:23-45")) {
std::cout << i << '\n';
}
}
推荐阅读
- python - 要求输入时打印不需要的无
- typescript - 使用打字稿对逗号分隔的数字列表求和
- azure - Azure Active Directory SAML2.0 经过身份验证的 Web 应用的用户属性映射
- javascript - 如何在getUserMedia()中始终设置麦克风询问(默认)?
- c++ - 我们如何使用线程中的计时器在使用 vc++ 的特定时间段后创建文本文件?
- javascript - 如何从数组中提取字母和数字并使用使用javascript的函数传递给字符串?
- c++ - C++ 中的 return 语句有类型吗?
- wpf - FlowDocument 上的 MouseDown 事件向下滚动 FlowDocumentScrollViewer
- linux - 已解决:在 bash 过程中向数组添加错误消息
- amazon-web-services - 如果令牌过期,AWS HTTP Api Gateway lambda 授权方如何返回 401