我想创建一个名为remstr()
. 此函数从另一个字符串中删除给定的字符串,而不使用string.h
. 例子:
str1[30]= "go over stackover"
str2[20]= "ver"
strrem[20]= "go o stacko"
请帮我
C 为您提供了许多有用的构建块来执行此操作。特别是,您可以使用三个标准库函数构建此函数:(strstr
查找要删除的字符串),strlen
计算字符串其余部分的长度,并将memcpy
您不想删除的部分复制到目的地(如果您希望该功能就地运行,则需要使用memmove
而不是)。memcpy
所有三个函数都在<string.h>
.
尝试编写函数,并在遇到麻烦时提出具体问题。
伪代码对于您想要做的事情非常简单,如果您不能使用string.h
函数,那么您只需要重新创建它们。
char * remstr(char *str1, char * str2)
{
get length of str1
get length of str2
for(count from 0 to length of str2 - length of str1) {
if ( str1[count] != str2[count])
store str2[count] in to your new string
else
loop for the length of str1 to see if all character match
hold on to them in case they don't and you need to add them into you
new string
}
return your new string
}
您需要弄清楚细节,是否remstr()
为新字符串分配内存?它是否需要一个现有的字符串并更新它?你的字符串的前哨字符是什么?
你需要一个strlen()
才能工作,因为你不能使用它,你需要做一些类似的事情:
int mystrlen(char* str) {
while not at the sentinel character
increment count
return count
}
#include <stdio.h>
#include <stdlib.h>
void remstr(char *str1, char *str2, char *strrem)
{
char *p1, *p2;
if (!*str2) return;
do {
p2 = str2;
p1 = str1;
while (*p1 && *p2 && *p1==*p2) {
p1++;
p2++;
}
if (!(*p2)) str1 = p1-1;
else *strrem++ = *str1;
} while(*str1 && *(++str1));
*strrem = '\0';
}
int main() {
char str1[30]= "go over stackover";
char str2[20]= "ver";
char strrem[30];
remstr(str1, str2, strrem);
printf("%s\n",strrem);
}
使用此函数,您甚至可以将结果放在同一个字符串缓冲区中str1
:
remstr(str1, str2, str1);
printf("%s\n",str1);