>>在溪流中留下辛博斯特吗?
Does >> leave simbolst in the stream?
本文关键字:gt 更新时间:2023-10-16
我在下面写的代码计算给定数字的位数总和,直到总和>10。因此,问题是:运算符">>"从流中提取信息并使流为空?如果是,那么为什么在我将EOF的位重置为0之后,我不能执行"ss<<sum"呢?
int sum = 0;
stringstream ss("13245");
char ch;
while (1)
{
while (ss >> ch)
{
sum += ch - '0';
}
ss.clear();
ss << sum; //can't perfom
if (sum<10 ) break;
sum=0;
}
cout << sum;
使用整数不是比使用字符串更能解决问题吗?类似:
#include <iostream>
template<typename SomeIntegralT>
SomeIntegralT sum_digits(SomeIntegralT n) {
do {
SomeIntegralT sum = 0;
while( n ) {
sum += n % 10;
n /= 10;
}
n = sum;
} while( n > 9 );
return n;
}
int main()
{
std::cout << sum_digits(124343525ul) << std::endl;
std::cout << sum_digits(9999) << std::endl;
std::cout << sum_digits(12345) << std::endl;
}
如果你试图在每次迭代中重置流,这可能会达到你想要的效果:
int sum = 0;
stringstream ss("13245");
while (1)
{
int c;
while ((c = ss.get()) != EOF)
sum += c - '0';
ss.clear(); // clear stream state
ss.str(""); // clear buffer
ss << sum; // write new data
if (sum<10 )
break;
sum=0;
}
cout << sum;
输出
6
注意:我可以随意使用get()
成员,因为它似乎更适合您想要实现的目标。使用9999
辅助样本进行测试也会产生预期的9
结果。为了回答您的问题,是的,字符串缓冲区不会被清除,除非您将其清除(我们在上面对str("")
执行了此操作)。
相关文章:
- 没有找到相关文章