[英]C++ c_str() doesn't return complete string
我正在执行C ++分配,需要用户输入表达式(例如:2 *(6-1)+ 2)并输出结果。 除非在用户输入中遇到空格,否则一切都会正常工作。
要求将用户输入传递给以下方法;
double Calculate(char* expr);
我知道问题是由c_str()引起的,其中空格字符充当终止的空字节,尽管我不确定如何克服此问题。
理想情况下,我想保留空格字符,但我只想删除它们,因为空格在表达式中毫无用处。 当使用string :: data而不是c_str时,我得到相同的结果。
int main(int argc, char **argv)
{
string inputExpr;
Calc myCalc;
while(true) {
cin >> inputExpr;
if(inputExpr == "q") break;
cout << "You wrote:" << (char*)inputExpr.c_str() << endl; // debug
printf("Result: %.3f \n\n", myCalc.Calculate( (char*)temp.c_str() ) );
}
return 0;
}
c_str工作正常。 您的问题是cin >> inputExpr
。 >>
运算符只读取直到下一个空格,因此您不会完全读取方程式。
您要使用的是std :: getline :
std::getline (std::cin,inputExpression);
它将读取直到到达换行符。 如果需要特定的定界符,请参见功能说明。
问题不在于inputExpr.c_str()和c_str这样,c_str()返回指向包含以空终止的序列的字符数组的指针。 在阅读cin时,您会得到空格或制表符等分隔为多个字符串的信息。 检查与字符串内容相符的方法以解决预期的操作
首先,我认为您的Calculate()
方法应将const char*
字符串作为输入,因为expr
应该是输入 (只读)参数:
double Calculate(const char* expr);
请注意,如果使用const char*
,则可以简单地调用std::string::c_str()
而无需进行任何难看的强制转换即可删除const-ness。
而且,由于这是C ++而不是C,因此使用std::string
会很好:
double Calculate(const std::string& expr);
在还读取空白的特定问题上,这不是终止NUL
字节的问题:空间不是 NUL
。
您应该使用std::getline()
而不是简单的std::cin >>
重载来更改读取字符串的方式:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line;
getline(cin, line);
cout << "'" << line << "'" << endl;
}
如果编译并运行此代码,然后输入类似于Hello World
,则将获得整个字符串作为输出(包括将两个单词分隔开的空格)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.