【问题标题】:C - test string equivalence without strcmpC - 在没有 strcmp 的情况下测试字符串等价
【发布时间】:2015-02-13 03:57:05
【问题描述】:

在我的一项大学作业中,我使用的图书馆受到限制。我是 C 和指针的新手,想看看两个字符串(或者我应该说 char)是否相等。

我的一部分想要遍历'char string'的每个字符并测试等价性,但随后又回到了如何测试等价性(大声笑)。

感谢任何帮助。

编辑:我看到了这个:

  warning: result of comparison against a string literal is
  unspecified (use strncmp instead) [-Wstring-compare]

这会导致分段错误。我知道这与这段代码有关,因为我添加的只是:

    if (example.name == "testName"){
        printf("here!\n");
    }

【问题讨论】:

  • chars 只是小整数,因此您可以像比较任何其他整数一样比较它们。
  • 应该对我得到的内容进行编辑。 OP 已更新
  • 在 'example.name == "testName"' 你没有比较字符串

标签: c string equivalent


【解决方案1】:

我的一部分想要遍历'char string'的每个字符并测试等效性

这正是您需要做的。创建一个函数mystrcmp,其签名与regular strcmp相同,

int mystrcmp ( const char * str1, const char * str2 );

并编写您自己的实现。

但随后又回到了如何测试等价性。

当您逐个字符循环时,您测试的是单个字符的等价性,而不是字符串。 C 中的字符可以被视为数字:您可以使用 == 比较它们是否相等,使用 <> 检查哪些字符代码小于或大于,等等。

现在唯一要做的就是决定何时停止。您可以通过将每个字符串的当前字符与零(即空终止符)进行比较来做到这一点。

在使用之前不要忘记前向声明您的mystrcmp 函数。

【讨论】:

    【解决方案2】:

    C 中的字符串以空字符(0x00 or \0) 终止。您应该逐个字符地比较循环中的两个字符串,直到达到其中一个字符串的空字符。

    如果字符不相等,则应中断循环。

    编辑:

    回答您有问题的编辑:

    你应该把两个字符指针指向两个字符串,然后像这样复制它们

    //loop start,loop till null for any one of the string is found
    
    if(*ptr1 != *ptr2)
    {
       //break loop
    } 
    
    ptr1++;ptr2++;
    
    //end loop
    
    if((*ptr1 == *ptr2) &&(*ptr1== 0x00))
    
    
    {
          //strings are equal
    }
    

    【讨论】:

      【解决方案3】:

      鉴于这是一项大学作业,您应该注意字符只是小整数。您还应该注意 C 字符串是由二进制零 (0x00) 终止的连续内存缓冲区。

      您还应该了解指针数学。您将学习缩短必须编写的代码的方法,同时学习有关 C 语言和计算机工作原理的真正有趣的东西。如果您选择从事低级编程的职业,它肯定会对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多