在做openjudge的时候遇到些问题
网址附上http://noi.openjudge.cn/ch0107/16/
我写的代码如下:
#include
#include
#include
using namespace std;
int main()
{
string a;
string b;
getline(cin,a);
getline(cin,b);
int ac;
int bc;
int c=0;
ac=a.size();
bc=b.size();
if(ac>bc)
{
for(int i=0;iif(a[i]==b[i]||a[i]+32==b[i]||a[i]-32==b[i])
{
c+=1;
}else
{
if(a[i]>b[i])
{
cout<<'>';
break;
}else
{
cout<<'<';
break;
}
}
}
}else if(acfor(int i=0;iif(a[i]==b[i]||a[i]+32==b[i]||a[i]-32==b[i])
{
c+=1;
}else
{
if(a[i]>b[i])
{
cout<<'>';
break;
}else
{
cout<<'<';
break;
}
}
}
}else
{
for(int i=0;iif(a[i]==b[i]||a[i]+32==b[i]||a[i]-32==b[i])
{
c+=1;
}else
{
if(a[i]>b[i])
{
cout<<'>';
break;
}else
{
cout<<'<';
break;
}
}
}
}
if(c==ac)
{
cout<<'=';
}
}
并且运行结果为
25行和45行,你这里两个判断都是超出字符串长度的判断。 编译器好像是在string后给加了个\0我用我电脑上的试了一下(也就是说如果 a[ac] = '\0' b[bc] = '\0'),这样的话判断不会出现问题,
但是在45行判断之后进行退出时 因为ac<bc 假设字符串为ab和abc 你会返回 <=
你退出判断后 在此处因改判断c == bc ,而不是c == ac.
#include <iostream>
#include <string>
int main() {
std::string s1, s2;
std::getline(std::cin, s1);
std::getline(std::cin, s2);
auto p = s1.c_str();
auto q = s2.c_str();
while (*p && *q && std::tolower(*p) == std::tolower(*q)) {
p++;
q++;
}
auto r = *p - *q;
if (r == 0)
std::cout << "=";
else if (r > 0)
std::cout << ">";
else
std::cout << "<";
return 0;
}