新人一个不要太高级
#include <stdio.h>
#include <string.h>
#define STRING_SIZE 80
void delete_substr(const char *str, const char *substr, char *resultstr) {
int i, j;
unsigned long substrlen, resultstrlen;
char *p;
substrlen = strlen(substr);
strcpy(resultstr, str);
resultstrlen = strlen(resultstr);
p = strstr(resultstr, substr);
while(p != NULL) {
for(i = 0; i < substrlen; i++) {
for(j = (p - resultstr) + substrlen - i; j < resultstrlen; j++){
resultstr[j - substrlen] = resultstr[j];
}
resultstrlen=resultstrlen-substrlen;
resultstr[resultstrlen] = '\0';
}
p = strstr(resultstr, substr);
}
}
int main(void)
{
char str[STRING_SIZE + 1], substr[STRING_SIZE + 1], resultstr[STRING_SIZE + 1];
scanf("%s", str);
scanf("%s", substr);
delete_substr(str, substr, resultstr);
printf("%s\n", resultstr);
return 0;
}
#include
#include
#include
using namespace std;
char *includeStr(char s[], char t[]) {
int i, j, k;
for (i = 0; s[i]; ++i) {
if (s[i] == t[0]) {
k = i + 1;
for (j = 1; t[j] == s[k] && s[k] && t[j]; ++k, ++j);
if (t[j] == '\0') return s + i;
}
}
return 0;
}
void delStr(char s[], char t[]) {
char *p;
while (p = includeStr(s, t))
strcpy(p, p + strlen(t));
}
int main()
{
char ch1[100], ch2[100];
printf("input first string:");
gets(ch1);
//printf("%s\n", ch1);
printf("input deleted string:");
gets(ch2);
//printf("%s\n", ch2);
printf("result string:");
delStr(ch1, ch2);
printf("%s", ch1);
return 0;
}
亲测有效
这个问题有个bug,问:主串s1=“aabaabacdeg”子串s2=“aaba”,请问结果是“cdeg”还是“abacdeg”
(问题就是:主串中重叠的子串怎么处理)