c++ - 如何使用的功能像 strcmp() 的对象在 C++ 中
问题描述
我还注意到 <strings.h> 的函数不适用于 <string.h> 的对象
例如在开发 C++
#include<string>
#include<strings.h>
using namespace std;
int main()
{
string a="admin";
string b;
cin>>b;
if(strcmp(a,b)==0)
{
cout<<"Equal";
}
}
因此编译器在调用 strcmp() 函数的行显示错误。
[Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'
这个错误实际上意味着什么以及如何解决这个问题以制作登录菜单。
请帮我解决这个问题
我也知道使用 c 类型字符串的替代方法如下,它工作正常
#include<strings.h>
using namespace std;
int main()
{
char user[32]="admin",u[32]="";
char password[32]="admin",p[32]="";
cout<<"\nLOGIN>>\n\nEnter User Name:";
cin.getline(u,32);
cout<<"Enter Password:";
cin.getline(p,32);
if(strcmp(u,user)==0 && strcmp(p,password)==0)
{
cout<<"Match";
}
}
但我想比较 <string.h> 的对象,而不是数组。
解决方案
strcmp
作用于 c-strings,而不是 std::strings。
要访问 std::string 的内部 c 字符串,请使用c_str() 方法。
IE
if (strcmp(a.c_str(), b.c_str()) == 0) {
// ...
}
但是你也可以直接做比较
if (a == b) {
// ...
}
推荐阅读
- c - 升级到 Python3 - C 数据类型
- google-cloud-platform - 将 Google AutoML API 与 API KEY 连接时出错
- angular - 注册调整大小的事件
- react-native - 子组件样式不起作用,但是当我将代码保存在子组件中时,然后在热重载样式后将其应用于子组件
- sql - 使用单独的 where 子句优化从同一个表查询连接 3 次
- python - 在 python 中编辑日期时间格式(使用 datetime.strptime)
- java - Java中的父子参数化构造函数
- matplotlib - matplotlib plot 在 streamlit 中的分辨率很差
- java - 从openj9堆驼峰获取字节数组数据
- java - 如何使用 XmlJsonParser 将信息从 java 保存和读取到 XML?