所以我想比较两个字符串而不只是一个字符。我知道如何按字符比较两个字符串,或仅按选定位置上的字符比较两个字符串,但是我不确定如何按一个以上字符比较两个字符串?例如,我想比较两个字符串乘以最后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");
答案 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
}