比较两个字符串 - 获取较长字符串的正确部分

时间:2012-01-28 12:40:36

标签: c

我有两个字符串,例如:

  • str1 = "aaabbbcccdddeee"
  • str2 = "aaabbbccc"

如何使用str1 - str2来获取dddeee子字符串?

5 个答案:

答案 0 :(得分:5)

如果str2保证为str1的前缀,那么这就足够了:

const char *str3 = &str1[strlen(str2)];

这相当于:(正如@James在评论中指出的那样)

const char *str3 = str1 + strlen(str2);

当然,str3只是指向其中一个原始字符串的指针。如果原始字符串的内容发生变化,那么结果也会发生变化。因此,您可能需要使用malloc()strcpy()(然后在free()处)创建副本。

答案 1 :(得分:2)

这将跳过两个字符串的公共前缀:

char* suffix(const char* prefix, const char* str) {
    while (*prefix && *str && *prefix == *str) {
        prefix++;
        str++;
    }
    return str;
}

例如,如果您传递"AAB""AACC",则会返回"CC"

答案 2 :(得分:1)

由于您已澄清str2是[{1}}的前缀,因此只需使用以下操作即可获得str1中额外部分的指针:

str2

例如,要打印字符串的“dddeee”部分:

str1 + strlen(2);

这是如何工作的很简单。 printf("%s\n", str1 + strlen(str2)); 是指向str1 + strlen(str2)个字符的指针,距离指向strlen(str2)的字符串的开头是N个字符。 str1返回第二个字符串中的字符数,并跳过第一个字符串中的那些字符并到达额外部分。

答案 3 :(得分:1)

str3将包含前缀的副本

str1 = "aaabbbcccdddeee"
str2 = "aaabbbccc"

size_t length = strlen1 - strlen2; 
char* str3 = calloc(sizeof(char), length + 1);

memcpy(str3, str1+strlen(str2), length);

答案 4 :(得分:1)

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

int main()
{
    char a[] = "aaaabbbbbdddeee";
    char b[] = "aaaabbbbb";

    const char* start = strstr(a, b);
    if (start)
    {
        printf("%s\n", a + strlen(b));
    }

    return 0;
}