首页 > 解决方案 > 使用循环的字典字符串比较

问题描述

我想按字典顺序比较两个长度相等的字符串,其中包含拉丁字母。大写和小写字母被认为是相同的。

这是我的代码:

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;

但是,这会在某些测试条件下产生错误。

这里有什么问题?

标签: c++stringc++11

解决方案


您可以使用strcmpCstd::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;
}

推荐阅读