【发布时间】:2019-11-10 04:18:03
【问题描述】:
我有以下代码:
int compare(string a,string b)
{
int length=a.length();
for(int i=0; i < length; i++)
{
if(a[i]<b[i])
return 1;
if(a[i]>b[i])
return 0;
}
....
}
当字符串 a 的长度大于字符串 b 的长度并且字符串 a 以字符串 b 开头时,我很感兴趣。
示例:
字符串 a="abcdefghi"
字符串 b="abcde"
该函数将返回0。我想知道该函数是否有机会返回1;在这种情况下。
【问题讨论】:
-
按原样写,没有。您还应该在
for循环中考虑b.length。如果您发现自己处于其中一个字符串结束而另一个字符串仍然有字符的情况下,您知道您必须返回非零值。 -
Here 是一堆 C 中的实现,您可以从中获取灵感。
-
您正在调用未定义的行为,因此任何事情都可能发生。
b[i]在i >= b.length()时未定义 -
您是为此编写比较函数还是只需要比较两个字符串?如果是后一种情况,你可以写
a < b。 -
我有一个程序有错误,我正在尝试找到它(不知道哪些情况不起作用,也找不到程序没有的测试工作,但我确定它有一个错误)所以我找到了这个代码序列,如果这个函数在这种情况下可以返回 1,这意味着这是一个错误。
标签: c++ string-matching