4

我需要一些帮助来从 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);

谢谢!

4

5 回答 5

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

演示

于 2013-06-26T22:50:43.767 回答
1

首先使用字符串分词器

std::string text = "token, test   153 67 216";

char_separator<char> sep(", ");
tokenizer< char_separator<char> > tokens(text, sep);

然后,如果您不确切知道将获得多少个值,则不应使用单个变量,而应使用类似或更好a b c的数组a ,它可以适应您读取的元素数量。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

于 2013-06-26T22:41:52.660 回答
1
  • 用于std::isdigit()检查字符是否为数字。直到没有达到空间,逐步添加到单独的string.
  • 然后使用std::stoi()将您的字符串转换为 int。
  • clear()使用方法清除字符串的内容。
  • 转到第一步

重复直到未到达基本字符串的末尾。

于 2013-06-26T22:04:33.790 回答
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];
     }

}
于 2015-07-01T19:26:22.280 回答
0

要读取一行字符串并从中提取整数,

 getline(cin,str);
 stringstream stream(str);
 while(1)
  {
    stream>>int_var_arr[i];
    if(!stream)
          break;
    i++;
    }
   } 

整数存储在 int_var_arr[]

于 2017-07-17T11:30:24.897 回答