C++ 如何在c++;

C++ 如何在c++;,c++,C++,我有一个函数接收一个字符串,它是一对逗号分隔的整数,形式类似于“12,4”。如何从该字符串中解析整数?取决于传入数据是否有效。如果可以,我会: #include <cstdlib> #include <utility> #include <string> std::pair<int, int> split(std::string const& str) { int const a = std::atoi(str.c_str());

我有一个函数接收一个字符串,它是一对逗号分隔的整数,形式类似于“12,4”。如何从该字符串中解析整数?

取决于传入数据是否有效。如果可以,我会:

#include <cstdlib>
#include <utility>
#include <string>

std::pair<int, int> split(std::string const& str)
{
    int const a = std::atoi(str.c_str());
    int const b = std::atoi(str.c_str() + str.find(',') + 1);
    return std::make_pair(a, b);
}
#包括
#包括
#包括
std::对拆分(std::string const&str)
{
int const a=std::atoi(str.c_str());
int const b=std::atoi(str.c_str()+str.find(',')+1);
返回std::生成一对(a,b);
}

boost标记器工作得很好。例如,单击。

std::getline
实现了基本的“拆分”功能(我没有看到在其他问题的前几个答案中提到它。)

vector数字;
istringstream所有数字iss(“12,4”);
字符串编号;
整数;
while(getline(所有数字,数字,,)//以逗号分隔
&&istringstream(数字\u str)>>数字){
数字。推回(数字);
}

如果使用Qt,可以使用
QString::split()

在php中,您可能会使用
explode
函数并使用逗号作为分隔符。从
istringstream中提取的内容是否应该传递常量作为lhs的引用而失败?@wilhelm:不,因为它是一个成员函数。它不是
常量
成员。[27.6.1.2.2]@wilhelm:没关系;右值未转换为引用。@rubenvb:我不清楚你的意思
atoi
是一个C API,因此不能抛出异常。好的,措辞不好。我的意思是,当它阻塞时,它会产生无意义的结果:
atoi
在非整数上给出0,就像
atoi
在0上给出0一样。如果输入需要验证,您也可以使用类型安全的
stringstream
选项。@rubenvb:这就是为什么我特别说“如果可以(取决于传入的数据是否有效)”。如果数据需要验证,我同意你的代码< ATOI 完全不合适。同意,但是它仍然是一个可怕的函数在C++中使用。例如,看到这个答案所引起的讨论:@rubenvb:可能,但考虑到我明确提出了使用它的警告,我认为没有理由投反对票。就我个人而言,我使用boost.spirit.qi来做这类事情,但我讨厌用它来回答像这样的琐碎问题,因为它提出的问题往往比回答的问题多。
vector< int > numbers;

istringstream all_numbers_iss( "12,4" );
string number_str;
int number;

while ( getline( all_numbers_iss, number_str, ',' ) // separate at comma
        && istringstream( number_str ) >> number ) {
    numbers.push_back( number );
}