【问题标题】:Invalid use of void expression in strcmp在 strcmp 中无效使用 void 表达式
【发布时间】:2014-07-15 16:08:30
【问题描述】:

我正在检查两个字符串是否是彼此的排列。我正在使用以下代码:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

void sort(char *str)
{
    char temp;
    for(int i=0;i<strlen(str);i++)
    {
        if(str[i]>str[i+1])
        {
            temp=str[i];
            str[i]=str[i+1];
            str[i+1]=temp;
        }
    }
}

int main()
{
    char string1[10],string2[10];
    int val;
    cout<<"Enter first string";
    gets(string1);
    cout<<"Enter second string";
    gets(string2);
    val = strcmp(sort(string1),sort(string2));
    if(val==0)
    {
        cout<<"Same strings"<<endl;
    }
    else 
    {
        cout<<"Different Strings"<<endl;
    }
    return 0;
}

但我在 strcmp 行收到“无效使用 void 表达式错误”。我该如何解决 ? 谢谢

【问题讨论】:

  • 你的排序函数是void:void sort(char *str)。您不能将其与 strcmp() 一起使用。
  • 永远不要使用gets。由于完全无视安全性,它已从 C 和 C++ 中删除。

标签: c++ strcmp


【解决方案1】:

您似乎想在排序后比较字符串。假设您的 sort 函数做正确的事,您需要比较字符串排序之后。

sort(string1);
sort(string2);
val = strcmp(string1, string2);

错误的原因是您的sort 函数返回void。所以你有效地将void 参数传递给strcmp。那是行不通的。

在 C++ 中执行此操作的方法是使用 std::string,并调用 std::sort

std::string string1, string2;
std::cout << "Enter first string";
std::cin >> string1;
std::cout << "Enter second string";
std::cin >> string2;
std::sort(string1.begin(), string1.end());
std::sort(string2.begin(), string2.end());
bool val = string1 == string2;

【讨论】:

  • 除了已经有一个算法(至少在 C++11 中):std::is_permutation :) 在 C++14 中更好,因为你不需要担心不同的长度。
  • 是的,我知道这个功能:)。我希望手动实现它。但我似乎每次都会显示“不同的字符串”。知道为什么吗?
【解决方案2】:

sort 不返回任何内容(void),因此它的返回值不能作为strcmp 的参数。

sort(string1);
sort(string2);
val = strcmp(string1, string2);

【讨论】:

  • 谢谢!那成功了。但是,这里显然存在一个逻辑问题,因为即使我将相同的字符串作为输入,我仍然会得到“不同的字符串”。为什么会这样?
【解决方案3】:

你不能 strcmp voidsort() 返回。你想先sort() 然后strcmp 排序的字符串,类似于:

sort(string1);
sort(string2);
val = strcmp(string1, string2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2018-08-13
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多