如何比较两个字符串而不只是一个字符?

时间:2019-07-13 19:50:45

标签: c strcmp

所以我想比较两个字符串而不只是一个字符。我知道如何按字符比较两个字符串,或仅按选定位置上的字符比较两个字符串,但是我不确定如何按一个以上字符比较两个字符串?例如,我想比较两个字符串乘以最后3个字符,该怎么做?

我已经尝试过:

if( strcmp(str1-1, str2-1)==0 && strcmp(str1-2, str2-2) ==0)

但是它不起作用。我正在使用scanf函数从用户那里获取两个字符串。

if( strcmp(str1, str2) ==0){
    printf("equal");
}else{
    printf("not");

4 个答案:

答案 0 :(得分:4)

您需要获取字符串的长度,从中减去3,然后将其添加到字符串的开头以获取开始比较的索引。另外,请确保如果字符串的长度小于3,则不会得到负索引。

size_t len1 = strlen(str1);
size_t index1 = len1 >= 3 ? len1 - 3 : 0;
size_t len2 = strlen(str2);
size_t index2 = len2 >= 3 ? len2 - 3 : 0;

if (strcmp(str1 + index1, str2 + index2) == 0) {
    printf("equal\n");
} else {
    printf("not equal\n");
}

答案 1 :(得分:1)

标准中没有这样的功能,但是您可以自己滚动,例如:

#include <stdio.h>
#include <string.h>

int revcmp(const char *a, const char *b, size_t start)
{
    size_t len;

    len = strlen(a);
    if (len < start) {
        return 0;
    }
    a += len - start;
    len = strlen(b);
    if (len < start) {
        return 0;
    }
    b += len - start;
    return !strcmp(a, b);
}

int main(void)
{
    char *a = "abcxyz";
    char *b = "123xyz";

    printf("%d\n", revcmp(a, b, 3));
    return 0;
}

答案 2 :(得分:0)

首先,您需要确定两个字符串的字符串长度。 长度必须大于要比较的最后一个字符数。 使用指针算法,您可以移至要开始比较的位置:

int strlen1 = strlen(str1);
int strlen2 = strlen(str2);
const int LASTCMP = 3;
if (strlen1 >= LASTCMP && strlen2 >= LASTCMP 
   && strcmp(str1+strlen1-LASTCMP , str2+strlen2-LASTCMP ) == 0)
{
    printf("last %d characters are equal", LASTCMP);
}
else
{
    printf("not");
}

答案 3 :(得分:0)

如果您只想比较一定数量的字符,则可以使用strncmp

如果要比较后3个字符,则需要确定每个字符串的倒数第3个字符的索引,因此可以从此开始比较。为此,您需要strlen

将以上内容放在一起,并说明少于3个字符的字符串:

int pos1 = strlen(str1) - 3;
int pos2 = strlen(str2) - 3;

if (pos1 >= 0 && pos2 >= 0 && strncmp(str1 + pos1, str2 + pos2, 3) == 0) {
   // last 3 chars of the strings match
}