C - 在没有 strcmp 的情况下测试字符串等价性
C - test string equivalence without strcmp
在我的一项大学作业中,我使用的图书馆受到限制。我是 C 和指针的新手,想看看两个字符串(或者我应该说 char's)是否相等。
我的一部分想要循环遍历 'char string' 的每个字符并测试等价性,但后来它又回到了如何测试等价性(笑)。
感谢任何帮助。
编辑:我看到了这个:
warning: result of comparison against a string literal is
unspecified (use strncmp instead) [-Wstring-compare]
这会导致分段错误。我知道它与这段代码有关,因为我添加的是:
if (example.name == "testName"){
printf("here!\n");
}
C 中的字符串以空字符终止(0x00 or [=11=])
。您应该逐个字符比较循环中的两个字符串,直到达到任一字符串的空字符。
如果字符不相等,应该中断循环。
编辑:
回答您的编辑问题:
你应该使用两个指向两个字符串的字符指针,然后将它们像
//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
}
Part of me wants to loop through every char of the 'char string' and test equivalence
这正是您需要做的。使用与 regular strcmp
、
相同的签名创建一个函数 mystrcmp
int mystrcmp ( const char * str1, const char * str2 );
并编写自己的实现。
but then it comes back how to test equivalence.
逐个字符循环时,测试的是单个字符的等价性,而不是字符串。 C 中的字符可以像数字一样对待:您可以使用 ==
比较它们是否相等,使用 <
和 >
检查哪些字符代码小于或大于,等等。
现在唯一要做的就是决定何时停止。您可以通过将每个字符串的当前字符与零(即空终止符)进行比较来实现。
不要忘记在使用前转发声明您的 mystrcmp
函数。
鉴于这是一项大学作业,您应该注意字符只是小整数。您还应该注意 C 字符串是以二进制零 (0x00) 终止的连续内存缓冲区。
您还应该了解指针数学。您将学习如何缩短必须编写的代码,同时学习一些真正有趣的有关 C 语言和计算机工作原理的知识。如果你选择底层编程的职业,对你肯定有帮助。
在我的一项大学作业中,我使用的图书馆受到限制。我是 C 和指针的新手,想看看两个字符串(或者我应该说 char's)是否相等。
我的一部分想要循环遍历 'char string' 的每个字符并测试等价性,但后来它又回到了如何测试等价性(笑)。
感谢任何帮助。
编辑:我看到了这个:
warning: result of comparison against a string literal is
unspecified (use strncmp instead) [-Wstring-compare]
这会导致分段错误。我知道它与这段代码有关,因为我添加的是:
if (example.name == "testName"){
printf("here!\n");
}
C 中的字符串以空字符终止(0x00 or [=11=])
。您应该逐个字符比较循环中的两个字符串,直到达到任一字符串的空字符。
如果字符不相等,应该中断循环。
编辑:
回答您的编辑问题:
你应该使用两个指向两个字符串的字符指针,然后将它们像
//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
}
Part of me wants to loop through every char of the 'char string' and test equivalence
这正是您需要做的。使用与 regular strcmp
、
mystrcmp
int mystrcmp ( const char * str1, const char * str2 );
并编写自己的实现。
but then it comes back how to test equivalence.
逐个字符循环时,测试的是单个字符的等价性,而不是字符串。 C 中的字符可以像数字一样对待:您可以使用 ==
比较它们是否相等,使用 <
和 >
检查哪些字符代码小于或大于,等等。
现在唯一要做的就是决定何时停止。您可以通过将每个字符串的当前字符与零(即空终止符)进行比较来实现。
不要忘记在使用前转发声明您的 mystrcmp
函数。
鉴于这是一项大学作业,您应该注意字符只是小整数。您还应该注意 C 字符串是以二进制零 (0x00) 终止的连续内存缓冲区。
您还应该了解指针数学。您将学习如何缩短必须编写的代码,同时学习一些真正有趣的有关 C 语言和计算机工作原理的知识。如果你选择底层编程的职业,对你肯定有帮助。