C++ c_str() 不返回完整的字符串

标签 c++ string cin c-str

我正在做一个 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);

它将一直读到换行符。如果您需要特定的分隔符,请参阅函数说明。

关于C++ c_str() 不返回完整的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22937996/

相关文章:

c++ - 将两个 vector 中的元素按字母顺序排列到一个 vector 中

c++ - 确定是否所有需要的头文件都包含在另一个头文件中

c# - C# 中的 wtol 等价物

c++ - 只要用户输入,如何从用户那里获取整数?

c++ - OS X 上 Eclipse 中的 "Symbol ' cin ' can not be resolved"错误

c++ - 没有函数参数的可变参数模板

iphone - 是否有一个工具可以比较/合并/排序可本地化的字符串文件?

java - 在 Java 中使用 BufferedReader 处理换行符和空字符串

c++ - 如何从另一个线程停止 std::cin 不再读取输入?

c++ - #ifndef 和#pragma once 的问题