我需要一些帮助,从std :: string中获取所有整数,并将每个整数转换为int变量。
字符串示例:
<blah> hi 153 67 216
我希望程序忽略“blah”和“hi”并将每个整数存储到一个int变量中。所以它就像是:
a = 153
b = 67
c = 216
然后我可以单独自由打印,如:
printf("First int: %d", a);
printf("Second int: %d", b);
printf("Third int: %d", c);
谢谢!
答案 0 :(得分:8)
您可以使用其std::ctype
方法创建自己的操作scan_is
构面的函数。然后,您可以将生成的字符串返回到stringstream
对象,并将内容插入到整数:
#include <iostream>
#include <locale>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <cstring>
std::string extract_ints(std::ctype_base::mask category, std::string str, std::ctype<char> const& facet)
{
using std::strlen;
char const *begin = &str.front(),
*end = &str.back();
auto res = facet.scan_is(category, begin, end);
begin = &res[0];
end = &res[strlen(res)];
return std::string(begin, end);
}
std::string extract_ints(std::string str)
{
return extract_ints(std::ctype_base::digit, str,
std::use_facet<std::ctype<char>>(std::locale("")));
}
int main()
{
int a, b, c;
std::string str = "abc 1 2 3";
std::stringstream ss(extract_ints(str));
ss >> a >> b >> c;
std::cout << a << '\n' << b << '\n' << c;
}
输出:
1 2 3
的 Demo 强> 的
答案 1 :(得分:1)
std::isdigit()
检查字符是否为数字。在未达到空格之前,请逐步添加到单独的string
。 std::stoi()
将您的字符串转换为int。 clear()
方法清除字符串的内容。重复直到未到达基本字符串的末尾。
答案 2 :(得分:1)
首先使用string tokenizer
std::string text = "token, test 153 67 216";
char_separator<char> sep(", ");
tokenizer< char_separator<char> > tokens(text, sep);
然后,如果您不确切知道将获得多少值,则不应使用单个变量a b c
,而应使用int input[200]
或更好的数组std::vector
,它可以适应您阅读的元素数量。
std::vector<int> values;
BOOST_FOREACH (const string& t, tokens) {
int value;
if (stringstream(t) >> value) //return false if conversion does not succeed
values.push_back(value);
}
for (int i = 0; i < values.size(); i++)
std::cout << values[i] << " ";
std::cout << std::endl;
你必须:
#include <string>
#include <vector>
#include <sstream>
#include <iostream> //std::cout
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
using boost::tokenizer;
using boost::separator;
顺便说一下,如果你正在编程C ++,你可能想避免使用printf
,而更喜欢std::cout
答案 3 :(得分:0)
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>
int main() {
using namespace std;
int n=8,num[8];
string sentence = "10 20 30 40 5 6 7 8";
istringstream iss(sentence);
vector<string> tokens;
copy(istream_iterator<string>(iss),
istream_iterator<string>(),
back_inserter(tokens));
for(int i=0;i<n;i++){
num[i]= atoi(tokens.at(i).c_str());
}
for(int i=0;i<n;i++){
cout<<num[i];
}
}
答案 4 :(得分:0)
要读取一行字符串并从中提取整数,
getline(cin,str);
stringstream stream(str);
while(1)
{
stream>>int_var_arr[i];
if(!stream)
break;
i++;
}
}
整数存储在int_var_arr []
中