gpt4 book ai didi

c++ getline 分隔符为任意数字?

转载 作者:行者123 更新时间:2023-11-30 05:21:25 24 4
gpt4 key购买 nike

我输入的格式是:John Smith 2,2 3,1 2,2 我需要将“John Smith”保存为一个字符串,然后将后续数字保存到一个 vector 中。问题是,字符串部分可以是任意数量的单词。

我的计划是使用 getLine 并将分隔符设置为“任意数字”。这可能吗?我用谷歌搜索但找不到任何东西。谢谢。

最佳答案

尝试这样的事情:

#include <string>
#include <sstream>
#include <vector>
#include <cctype>
#include <locale>
#include <iterator>
#include <algorithm>
#include <functional>

struct my_punct : std::numpunct<char> {
protected:
virtual char do_decimal_point() const { return ','; }
virtual std::string do_grouping() const { return "\000"; } // groups of 0 (disable)
};

struct sName {
std::string value;
};

static inline void rtrim(std::string &s) {
s.erase(
std::find_if(
s.rbegin(), s.rend(),
std::not1(std::ptr_fun<int, int>(std::isspace))
).base(),
s.end()
);
}

std::istream& operator>>(std::istream &in, sName &out)
{
char ch, last = 0;
std::ostringstream oss;

std::istream::sentry s(in);
if (s)
{
out.value.erase();

do
{
ch = in.peek();
if (!in) break;
if (std::isspace(last) && std::isdigit(ch)) break;
ch = in.get();
oss << ch;
last = ch;
}
while (true);

out.value = oss.str();
rtrim(out.value);
}

return in;
}

std::string input = ...; // "John Smith 2,2 3,1 2,2"

sName name;
std::vector<double> v;

std::istringstream iss(input);
iss >> name;
iss.imbue(std::locale(iss.getloc(), new my_punct));
std::copy(
std::istream_iterator<double>(iss),
std::istream_iterator<double>(),
std::back_inserter(v)
);

关于c++ getline 分隔符为任意数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com