【问题标题】:C: evaluate part of the stringC:评估字符串的一部分
【发布时间】:2011-02-05 10:09:00
【问题描述】:

我找不到一个表达式来计算字符串的一部分。

我想得到类似的东西:

if (string[4:8]=='abc') {...}

我开始这样写:

if (string[4]=='a' && string[5]=='b' && string[6]=='c') {...}

但如果我需要评估字符串的很大一部分,比如

if (string[10:40] == another_string) {...}

然后它会写太多的表达式。有现成的解决方案吗?

【问题讨论】:

    标签: c string substring


    【解决方案1】:

    其他人发布的strncmp 解决方案可能是最好的。如果你不想使用 strncmp,或者只是想知道如何实现自己的,你可以这样写:

    int ok = 1;
    for ( int i = start; i <= stop; ++i )
        if ( string[i] != searchedStr[i - start] )
        {
            ok = 0;
            break;
        }
    
    if ( ok ) { } // found it
    else      { } // didn't find it
    

    【讨论】:

      【解决方案2】:

      你想要的标准 C 库函数是strncmpstrcmp 比较两个 C 字符串,并且 - 与通常的模式一样,“n”版本处理有限长度的数据项。

      if(0==strncmp(string1+4, "abc", 4))
          /* this bit will execute if string1 
             ends with "abc" (incluing the implied null)
             after the first four chars */
      

      【讨论】:

        【解决方案3】:

        你总是可以使用strncmp(),所以string[4:8] == "abc"(当然不是C语法)可以变成strncmp(string + 4, "abc", 5) == 0

        【讨论】:

        • 是的,为了完全正确,函数 (5) 的第三个参数实际上应该是 3 - 等于评估字符串的长度。
        • 您可以在那里使用sizeof "abc" - 1,这可能比手动计算非常长的字符串的字符更不容易出错。
        • @Halst:取决于比较。 [4:8] 切片不是三个字符长,不管是什么符号。
        猜你喜欢
        • 1970-01-01
        • 2017-07-06
        • 1970-01-01
        • 2014-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        相关资源
        最近更新 更多