【问题标题】:C++ comparing 2 stringsC ++比较2个字符串
【发布时间】: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 &gt;= b.length() 时未定义
  • 您是为此编写比较函数还是只需要比较两个字符串?如果是后一种情况,你可以写a &lt; b
  • 我有一个程序有错误,我正在尝试找到它(不知道哪些情况不起作用,也找不到程序没有的测试工作,但我确定它有一个错误)所以我找到了这个代码序列,如果这个函数在这种情况下可以返回 1,这意味着这是一个错误。

标签: c++ string-matching


【解决方案1】:

总共可能有两种情况:-

  1. 如果我们有 b &gt; 0 的长度,那么我们必须确保 a[i] ASCII 值必须小于b[i] ASCII 值..

    string a="abcdefghi"
    string b="abcde"
    
  2. 在您的示例中,当我们到达索引 5 时,结果将是 未定义,表示b[5] 可能包含垃圾值,其 ASCII 值大于a[i]。否则结果可能会适得其反。

【讨论】:

  • 这是我正在寻找的答案,因此在某些情况下,函数可能返回 1,谢谢。还要感谢@Sid S 指出同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2018-09-16
  • 2015-06-14
相关资源
最近更新 更多