我有两个字符串,例如:
str1 = "aaabbbcccdddeee"
str2 = "aaabbbccc"
如何使用str1 - str2
来获取dddeee
子字符串?
答案 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;
}