我解决了这个问题 -
编写一个由while循环组成的程序(每次都围绕着 loop)读入两个整数然后打印它们。 a时退出程序 终止' |'进入了。
使用2种方法 -
1)将输入读作 int 并将第一个与'|'
进行比较 -
int i1, i2;
while (cin >> i1){
if (i1 == '|')
break;
cin >> i2;
cout << endl << i1 << " " << i2 << endl;
}
但有了这个,我无法输入124作为'|' == 124
。
2)将输入读作字符串并使用我创建的函数将其转换为 int ,如下所示 -
// main function
string s1, s2;
int i1, i2;
while (cin >> s1){
if (s1 == "|"){
cout << "\nBreaking the loop\n";
break;
}
cin >> s2;
i1 = strtoint(s1);
i2 = strtoint(s2);
cout << endl << i1 << " " << i2 << endl;
}
// string to int
int strtoint(string s)
{
int i, j, val = 0, temp = 0;
for (i = s.size() - 1; i >= 0; --i){
temp = s[i] - '0';
for (j = 1; j < (s.size() - i); ++j)
temp *= 10;
val += temp;
}
return val;
}
但是现在问题进一步说要读取双打,并且使用第二种方法意味着将strtoint()
扩展为读取double
值(这很烦人)。
我想知道的是,有没有更好的方法来解决这个问题,因为第一种方法有一个错误,第二种方法需要更多的代码。或者我应该选择第二个?
答案 0 :(得分:1)
使用第二种方法,但实现这样的转换更方便:
#include <sstream>
template <typename T>
T from_string (std::string const & s)
{
std::stringstream ss (s);
T ret;
ss >> ret;
return ret;
}
您可以这样称呼它:
int a = from_string<int> (s1);
double d = from_string<double> (s2);
这不是最好的,但确实有效(希望如此)!
当然,您始终可以使用std::stoi()
标题中的std::stod()
,<string>
等功能。事实上,我建议使用上述方法。