【发布时间】:2019-08-18 16:56:09
【问题描述】:
基本上我正在创建自己的字符串类,称为 MyString。在这个类中有一个名为 getline 的函数,它的执行应该与“字符串”类的 getline 函数完全一样。
但是经过测试,似乎该函数在到达空字符或指定的分隔符时并没有退出循环,而是不断提示输入,并将该输入添加到已经存在的字符串(c-string)中。
istream& getline (istream& is, MyString& stringC, char delim){
int i = 0;
do{
is.get(stringC.stringM[i]);
i++;
if(i == stringC.Size){
stringC.Grow(1);
}
}while(is.peek() != '\0' || is.peek() != delim);
stringC.stringM[i] = '\0';
return is;
}
我已经解决了我的最后一个问题,但现在我的 main 只是在我最后一次 getline 调用后关闭。
cin >> s1;
getline(cin,s2,',');
getline(cin,s3);
//It ends here
cout << "\nNew string values:\n";
cout << "s1 = " << s1 << '\n';
cout << "s2 = " << s2 << '\n';
cout << "s3 = " << s3 << '\n';
cout << "---------------------------\n";
【问题讨论】:
-
is.peek() != '\0' || is.peek() != delim这总是正确的。你想要is.peek() != '\0' && is.peek() != delim -
总是足够接近。
-
很好的发现。遗憾的是,我刚刚投票关闭作为一个错字。
-
您的代码中的其他地方一定有另一个错误,这会导致您的崩溃。
-
请不要为后续问题编辑您的问题,您可以发布另一个问题。
标签: c++ getline c-strings istream