我有两个字符串,例如:比较两个字符串 - 得到的长一个
str1 = "aaabbbcccdddeee"
str2 = "aaabbbccc"
右半部分如何做这样的事情str1 - str2
得到dddeee
子?
我有两个字符串,例如:比较两个字符串 - 得到的长一个
str1 = "aaabbbcccdddeee"
str2 = "aaabbbccc"
右半部分如何做这样的事情str1 - str2
得到dddeee
子?
如果str2
保证是的str1
前缀,那么这将是足够的:
const char *str3 = &str1[strlen(str2)];
这相当于此:(如@詹姆斯在评论指出)
const char *str3 = str1 + strlen(str2);
当然,str3
只是指向其中一个原始字符串的指针。如果原始字符串的内容发生变化,那么结果也会如此。因此,您可能需要创建一个副本,使用malloc()
和strcpy()
(然后在某个时间点free()
)。
或'= str1 + strlen(str2);' – 2012-01-28 12:44:03
非常感谢你,这是很好的解决方案:) – gaffcz 2012-01-28 13:02:32
这将跳过两个字符串的公共前缀:
char* suffix(const char* prefix, const char* str) {
while (*prefix && *str && *prefix == *str) {
prefix++;
str++;
}
return str;
}
例如,如果你通过"AAB"
和"AACC"
,这将返回"CC"
。
谢谢你,这很好:) – gaffcz 2012-01-28 13:19:19
既然你已经澄清,str2
是str1
前缀,你可以得到的指针多余部分str2
简单地操作:
str1 + strlen(2);
例如,要打印的“dddeee”部分你的字符串:
printf("%s\n", str1 + strlen(str2));
这是如何工作的很简单。 str1 + strlen(str2)
是一个指针,它是strlen(str2)
指向字符串开头的N个字符是str1
。 strlen(str2)
返回第二个字符串中的字符数,并跳过第一个字符串中的许多字符并到达额外部分。
STR3将包含前缀的副本:
str1 = "aaabbbcccdddeee"
str2 = "aaabbbccc"
size_t length = strlen1 - strlen2;
char* str3 = calloc(sizeof(char), length + 1);
memcpy(str3, str1+strlen(str2), length);
#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;
}
是'str2'保证是'str1'的前缀? – 2012-01-28 12:41:45
如果'str1'不是以'str2'开始会怎样?例如str1 =“aaabbbxxxdddeee”和str2 =“aaabbbccc”?在这种情况下你想要输出什么? – 2012-01-28 12:43:30
谢谢,str2是str1的前缀.. – gaffcz 2012-01-28 12:48:57