gpt4 book ai didi

c++ - 字符串流和格式化

转载 作者:行者123 更新时间:2023-11-30 04:30:34 26 4
gpt4 key购买 nike

我正在使用 C++ 并编写一个程序,该程序应该用质数做很多事情。但是,主要问题是我无法在整数和字符串之间进行转换。我相信以下是相关代码:

for(int j=0;j<size-1;j++){
num=primes[j];
ss<<num;
ss>>temp;
ss.str("");
for (int count=0; count < temp.size(); count++) {
cout<<temp<<endl;
}

我知道我可以谷歌并弄清楚如何以另一种方式从整数转换。但是,我有一种感觉,我无法弄清楚出了什么问题的原因是因为我缺乏一些关于字符串流的基础知识,我不知道我希望可以修复哪些问题。 num 是一个 int,ss 是一个字符串流,cout temp 每次都打印出 2,这是 primes 的值[0]。我认为 stringstream 可能在第一次试用后无法读取,因为与换行符有关,但我真的不知道。

最佳答案

您遇到的原因是,在将第一个值读入 temp 后,EOF_BIT 将在 ss 中设置,之后无法进行读/写到 std::stringstream,因此 temp 不会更新为新值。

一种更易读的解释上述内容的方式; std::stringstream ss 会认为它已经到达终点(它已经到达了终点)。您需要告诉它“重新开始”(重置所有错误标志)才能在另一次迭代中使用。


我该如何解决这个问题?

有几种方法可用,对我来说最清楚的(在代码可读性方面)是为循环中的每个迭代器使用新的 std::stringstream(参见“Example solution #2).

查看下面所有将输出的片段:

2
3
5
7
11
13
17

示例解决方案#1

  int const PRIMES_SIZE         = 7;
int const primes[PRIMES_SIZE] = {2,3,5,7,11,13,17};

std::stringstream ss;
std::string temp;

for (int i =0; i < PRIMES_SIZE; ++i) {
ss << primes[i];
ss >> temp;

std::cout << temp << std::endl;

ss.clear (); // unset error flags
}

示例解决方案 #2

  int const PRIMES_SIZE         = 7;
int const primes[PRIMES_SIZE] = {2,3,5,7,11,13,17};

for (int i =0; i < PRIMES_SIZE; ++i) {
std::stringstream ss;
ss << primes[i];

std::cout << ss.str () << std::endl;
}

示例解决方案 #3

  #include <iterator>

...

int const PRIMES_SIZE = 7;
int const primes[PRIMES_SIZE] = {2,3,5,7,11,13,17};

std::stringstream ss;

std::copy (primes, primes+PRIMES_SIZE, std::ostream_iterator<int> (ss, "\n"));

std::cout << ss.str ();

关于c++ - 字符串流和格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com