Сравнение лексикографических строк с использованием циклов - PullRequest
0 голосов
/ 09 октября 2019

Я хочу лексикографически сравнить две строки одинаковой длины, содержащие латинские буквы. Прописные и строчные буквы считаются одинаковыми.

Вот мой код:

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;

Однако это приводит к ошибкам при определенных условиях теста.

Что здесь не так?

Ответы [ 4 ]

1 голос
/ 09 октября 2019

Вы можете использовать функцию сравнения

int x = in1.compare(in2);
if(x == 0)
     cout<<"Both are Equal";
else if (x > 0) 
    cout << in1 << " is greater than "<< in2 << endl; 
else
    cout << in2 << " is greater than "<< in1 << endl; 
1 голос
/ 09 октября 2019

Вы можете с уверенностью использовать операторы, предоставляемые стандартной библиотекой для std::string типов:

operator==
operator!=
operator<             lexicographically compares two strings
operator>             (function template)
operator<=
operator>=

Для получения дополнительной информации см. здесь .

1 голос
/ 09 октября 2019

Я думаю, что это неправильно, потому что не учитывает порядок символов. Например, «ab» и «ba» получат одинаковую сумму.

0 голосов
/ 09 октября 2019

Вы можете использовать strcmp с экстрактором строки std::string C 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...