从字符串中提取整数
Extract integer from a string
我有一个类似"y.x-name"的字符串,其中y和x是0到100之间的数字。从这个字符串中,在C++中将"x"提取到整数变量中的最佳方法是什么。
您可以通过.
拆分字符串,并将其直接转换为整数类型。while循环中的第二个数字是您想要的,请参阅示例代码:
template<typename T>
T stringToDecimal(const string& s)
{
T t = T();
std::stringstream ss(s);
ss >> t;
return t;
}
int func()
{
string s("100.3-name");
std::vector<int> v;
std::stringstream ss(s);
string line;
while(std::getline(ss, line, '.'))
{
v.push_back(stringToDecimal<int>(line));
}
std::cout << v.back() << std::endl;
}
它将输出:3
这个线程似乎有一个与您类似的问题,它可能会有所帮助;)
用C++进行简单的字符串解析
您可以使用boost::lexical_cast来实现它,它使用类似于billz的answer中的流:伪代码看起来是这样的(在那个例子中索引可能是错误的):
std::string yxString = "56.74-name";
size_t xStart = yxString.find(".") + 1;
size_t xLength = yxString.find("-") - xStart;
int x = boost::lexical_cast<int>( yxString + xStart, xLength );
解析错误可以通过lexical_cast引发的异常来处理。为了更灵活/更强大的文本匹配,我建议使用boost::regex。
对unsigned long strtoul( const char *str, char **str_end, int base )
使用两个调用,例如:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(){
char const * s = "1.99-name";
char *endp;
unsigned long l1 = strtoul(s,&endp,10);
if (endp == s || *endp != '.') {
cerr << "Bad parse" << endl;
return EXIT_FAILURE;
}
s = endp + 1;
unsigned long l2 = strtoul(s,&endp,10);
if (endp == s || *endp != '-') {
cerr << "Bad parse" << endl;
return EXIT_FAILURE;
}
cout << "num 1 = " << l1 << "; num 2 = " << l2 << endl;
return EXIT_FAILURE;
}
相关文章:
- 从字符串中提取整数并形成一个数组
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 从没有空格的字符串中提取整数
- 如何从字符数组C++中提取2个整数并将它们存储在2个变量中(初学者)
- 如何将ASCII数字转换为从文件中提取的整数
- 如何从字符串格式中提取 3 个整数"v%d.%d.%d"?
- C++从字符串中提取整数
- 从QString中提取整数
- 如何提取字符串中的整数?
- 从字符串中提取整数
- Systemc传输级建模从TLM_Generic_Payload提取两个整数
- 使用C 从定界线拆分字符串中提取整数数组
- 从用户输入中提取整数的枚举开关语句
- C++ 提取具有多个分隔符的字符串中的整数
- 如何从整数中提取缺失的数字
- 如何从两个字符之间的文件中提取整数
- C++ - 从整数数组中插入和提取字符
- 从字符串中提取整数
- C++,从字符数组中提取有符号的多位数整数
- 使用增强精神提取未阐明的字符串和整数