2012-01-28 48 views
1

我有两个字符串,例如:比较两个字符串 - 得到的长一个

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

右半部分如何做这样的事情str1 - str2得到dddeee子?

+2

是'str2'保证是'str1'的前缀? – 2012-01-28 12:41:45

+0

如果'str1'不是以'str2'开始会怎样?例如str1 =“aaabbbxxxdddeee”和str2 =“aaabbbccc”?在这种情况下你想要输出什么? – 2012-01-28 12:43:30

+0

谢谢,str2是str1的前缀.. – gaffcz 2012-01-28 12:48:57

回答

5

如果str2保证是的str1前缀,那么这将是足够的:

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

这相当于此:(如@詹姆斯在评论指出)

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

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

+1

或'= str1 + strlen(str2);' – 2012-01-28 12:44:03

+0

非常感谢你,这是很好的解决方案:) – gaffcz 2012-01-28 13:02:32

2

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

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

例如,如果你通过"AAB""AACC",这将返回"CC"

+0

谢谢你,这很好:) – gaffcz 2012-01-28 13:19:19

1

既然你已经澄清,str2str1前缀,你可以得到的指针多余部分str2简单地操作:

str1 + strlen(2); 

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

printf("%s\n", str1 + strlen(str2)); 

这是如何工作的很简单。 str1 + strlen(str2)是一个指针,它是strlen(str2)指向字符串开头的N个字符是str1strlen(str2)返回第二个字符串中的字符数,并跳过第一个字符串中的许多字符并到达额外部分。

1

STR3将包含前缀的副本

str1 = "aaabbbcccdddeee" 
str2 = "aaabbbccc" 

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

memcpy(str3, str1+strlen(str2), length); 
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; 
}