c++ - 使用循环的字典字符串比较
问题描述
我想按字典顺序比较两个长度相等的字符串,其中包含拉丁字母。大写和小写字母被认为是相同的。
这是我的代码:
string in1,in2;
getline(cin,in1);
getline(cin,in2);
int l=in1.length();
for(int i=0;i<l;++i){
in1[i]=tolower(in1[i]);
in2[i]=tolower(in2[i]);
}
int sum1=0;
int sum2=0;
for(int i=0;i<l;++i){
sum1=sum1 + int(in1[i]);
sum2=sum2 + int(in2[i]);
}
if(sum1==sum2)
cout<<"0"<<endl;
if(sum1<sum2)
cout<<"-1"<<endl;
if(sum1>sum2)
cout<<"1"<<endl;
但是,这会在某些测试条件下产生错误。
这里有什么问题?
解决方案
您可以使用strcmp
Cstd::string
字符串提取器c_str()
。这是一个完整的工作解决方案:
#include <iostream>
#include <string>
#include <string.h>
int main(int argc, char **argv)
{
std::string s1("aabad");
std::string s2("abaaaaaaa");
if (strcmp(s1.c_str(),s2.c_str()) < 0) std::cout << "s1 < s2\n";
if (strcmp(s1.c_str(),s2.c_str()) > 0) std::cout << "s2 < s1\n";
if (strcmp(s1.c_str(),s2.c_str()) == 0) std::cout << "s1 == s2\n";
return 0;
}
推荐阅读
- spring-boot - H2 刀片性能
- tcl - 如何在 TCL 中设置符号链接的 mtime?
- css - 在heroku上的react + rails应用程序中CSS未导入JS文件
- newrelic - Fluentd NewRelic 输出“时间必须是 Fluent::EventTime (or Integer): Float”
- python - NoReverseMatch:未找到带有参数 '('',)' 的“RPA_tool”的反向。尝试了 1 种模式:['admin_tool/RPA_tool/(?P
[^/]+)/$'] - android - React 原生轨道播放器中的应用启动问题
- r - 从 data.table 中的每个组中减去一个向量,并在两者中按日期匹配
- html - 如何将 div 放在居中的 div 上?
- reactjs - 在 React 中使用 map 将四个元素传递到一个组件中
- javascript - 如何在不使用表单的情况下从 Django Post 请求中获取文件对象并将其保存到模型中?