在strcmp中无效地使用空表达式

Invalid use of void expression in strcmp

本文关键字:表达式 strcmp 无效      更新时间:2023-10-16

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

#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;
}

但是我在字符串行得到一个"无效使用void表达式错误"。我该如何解决这个问题?由于

看起来您想在排序后比较字符串。假设您的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;

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

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

您不能将sort()void返回strcmp。您想要先sort()然后strcmp排序字符串,如:

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