使用循环进行词典字符串比较
Lexicographical string comparison using loops
我想按字典顺序比较两个长度相等的字符串,其中包含拉丁字母。大写和小写字母被视为相同。
这是我的代码:
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;
但是,这在某些测试条件下会产生错误。
这是怎么回事?
您可以使用比较函数
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;
我认为这是错误的,因为它不考虑字符的顺序。例如,"ab"和"ba"将获得相同的总和。
您可以将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 < s2n";
if (strcmp(s1.c_str(),s2.c_str()) > 0) std::cout << "s2 < s1n";
if (strcmp(s1.c_str(),s2.c_str()) == 0) std::cout << "s1 == s2n";
return 0;
}
您肯定可以使用标准库为std::string
类型提供的运算符:
operator==
operator!=
operator< lexicographically compares two strings
operator> (function template)
operator<=
operator>=
有关更多信息,请参阅此处。
相关文章:
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 字符串比较中的意外输出
- 如何执行不区分大小写的字符串比较?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- <<运算符优先级与字符串比较
- ">"运算符和"<"运算符如何进行字符串比较?
- Qt C++11 字符串通过子字符串比较列出交集
- std::out_of_range字符串比较中的异常
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 字符* 与uint8_t的字符串比较
- 用字符串 c++ 比较对向量的元素
- 使用循环进行词典字符串比较
- 如何为C++映射创建自己的字符串比较对象
- 不带比较()的字符串比较
- 与 IF 语句C++的字符串比较?
- 字符串比较在与变量一起使用时给出不同的输出
- 更快的字符串比较排序,用于唯一()
- C 字符串比较“祝您好运”&gt;“再见”
- C 奇怪的行为和字符串比较
- 子字符串与 std::memcmp 或字符串::比较的比较