시도 뭔가 :
#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)
);
아니, 구분 기호는 하나의 일반 문자입니다. 이것은 나쁜 생각입니다. –
문자열을 읽고 첫 번째 숫자를 검색하십시오. –
확인. 좋은 생각이야. 고맙습니다. 또한 내가 질문 한 방식에 문제가 있습니까? 나는 downvoted지고있는 것 같습니다. 다르게 말을해도 될까요? 내가 실수하면 미안해. –