Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用带有const char*指针的函数从表达式中删除空格_C++ - Fatal编程技术网

C++ 如何使用带有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

我正在处理一小段代码,希望删除一个简单表达式中的所有空白。我使用char数组表达式并将其传递给一个带有const char*指针的函数,但我无法删除空格。这是我尝试过的,但没有得到想要的输出

#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++