在strcmp中无效地使用空表达式
Invalid use of void expression in strcmp
我要检查两个字符串是否彼此排列。我使用以下代码:
#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);
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 带有用户定义类的c++折叠表达式
- 即使使用调试编译标志,表达式也是"optimized out"
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 在strcmp中无效地使用空表达式