C++ 如何使用带有const char*指针的函数从表达式中删除空格
我正在处理一小段代码,希望删除一个简单表达式中的所有空白。我使用char数组表达式并将其传递给一个带有const char*指针的函数,但我无法删除空格。这是我尝试过的,但没有得到想要的输出C++ 如何使用带有const char*指针的函数从表达式中删除空格,c++,C++,我正在处理一小段代码,希望删除一个简单表达式中的所有空白。我使用char数组表达式并将其传递给一个带有const char*指针的函数,但我无法删除空格。这是我尝试过的,但没有得到想要的输出 #include <iostream> using namespace std; void evaluate(const char *expression){ if (*expression == '\0') cout<<"Invalid"<<endl; whil
#include <iostream>
using namespace std;
void evaluate(const char *expression){
if (*expression == '\0') cout<<"Invalid"<<endl;
while(*expression){
if(*expression == ' '){
*expression++ ;
}
expression++;
}
cout<<expression;
}
int main()
{
char expr[] = "1 + 2 * 3";
evaluate(expr);
return 0;
}
如果有人能帮我,那就太好了。
提前谢谢 使用和
在这段代码中,我添加了string,但我建议完全删除代码中的C字符串,并用std::string替换它们
您不能更改函数中的C字符串,因为它是常量。如果我理解您的目的只是在调用evaluate时输出不带空格的表达式,那么您可以通过输出每个不带空格的字符来简化操作:
#include <iostream>
using namespace std;
void evaluate (const char *expression) {
if (!*expression) {
cout << "Invalid\n";
return;
}
while (*expression) {
if (*expression != ' ')
cout << (char)*expression;
expression++;
}
cout << '\n';
}
int main() {
char expr[] = "1 + 2 * 3";
evaluate(expr);
}
这只会增加指针,不必要地计算指针指向的内容。它不会修改原始字符数组
如果您希望表达式在内存中不带空格,而不仅仅是为了输出,我建议您在删除空格的情况下构建一个新数组。提示:std::string-简化您的生活。代码检测到空格,但在检测到空格时没有任何用处。在继续之前,请停止编码并确定在if*expression=='{这里是什么?}中真正需要做什么。如果您的目的只是输出而不带空格,那么while*expression{if*expression!=''cout为什么要在cout处强制转换为char?这里不需要,习惯实际上是从getchar;处理int c等。因为元素已经是char,所以这里您是正确的-强制转换是多余的,但无害。
#include <iostream>
using namespace std;
void evaluate (const char *expression) {
if (!*expression) {
cout << "Invalid\n";
return;
}
while (*expression) {
if (*expression != ' ')
cout << (char)*expression;
expression++;
}
cout << '\n';
}
int main() {
char expr[] = "1 + 2 * 3";
evaluate(expr);
}
$ ./bin/rmws_const_char
1+2*3
*expression++