C++ c_str() 不返回完整的字符串
C++ c_str() doesn't return complete string
我正在做一个C++赋值,它需要用户输入一个表达式(例如:2*(6-1)+2)并输出结果。除非在用户输入中遇到空格,否则一切都能正常工作。
要求将用户输入传递给以下方法;
double Calculate(char* expr);
我知道这个问题是由c_str()引起的,其中空格字符充当终止的空字节,尽管我不知道如何克服这个问题。
理想情况下,我想保留空格字符,但我会简单地删除它们,因为空格在表达式中没有任何作用。当使用字符串::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 nn", 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()
,而不需要任何难看的强制转换来删除常量。
而且,因为这是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
的内容,则会得到整个字符串作为输出(包括分隔两个单词的空格)。
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- C 字符串返回字符串的整数/双精度/长整型值
- 如何从COM模块中的函数返回字符串数组?
- React Native (Android):无法通过 JNI 在 jobject 中返回字符串
- 我如何在函数 cpp 中返回字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 格式化返回字符串C++
- 返回字符串vs通过引用传递字符串以更新值
- 如何在不使用 STL 的情况下从函数反转字符串后返回字符串C++?
- 使用 ctypes 从函数返回字符串C++会给出大的 int,而不是 char 指针
- 从 C++ 中的模板函数返回字符串和整数
- 返回字符串的散点回文计数
- C++重载字符串 [] 运算符以返回字符串和
- 返回字符串和不同向量数据类型的映射C++
- 字符串函数不返回字符串? C++
- 从函数返回字符串C++错误
- 如何在返回字符串的函数中不忽略void值
- 我想将字符串转换为 Json 格式并返回字符串向量作为答案
- C - 返回字符串时的分割故障
- 使用向量和字符串函数返回字符串