64,318
社区成员
发帖
与我相关
我的任务
分享
//1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
int delete_sub_str(const char *str,const char *sub_str,char *result)
{
assert(str != NULL && sub_str != NULL);
const char *p,*q;
char *t,*temp;
p = str;
q = sub_str;
t = result;
int n,count = 0;
n = strlen(q);
temp = (char *)malloc(n+1);
memset(temp,0x00,n+1);
while(*p)
{
memcpy(temp,p,n);
if(strcmp(temp,q) == 0 )
{
count++;
memset(temp,0x00,n+1);
p = p + n;
}
else
{
*t = *p;
p++;
t++;
memset(temp,0x00,n+1);
}
}
free(temp);
return count;
}
void main()
{
char s[100] = {'\0'};//把s字符数组置空
int num = delete_sub_str("123abc12de234fg1hi34j123k","123",s);
printf("The number of sub_str is %d\n",num);
printf("The result string is %s\n",s);
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int delete_sub_str(const char *str, const char *sub_str, char *result, int result_size)
{
if (!str || !sub_str || !result)
return -1;
int str_len = strlen(str);
int sub_len = strlen(sub_str);
int str_pos = 0;
int res_pos = 0;
int cnt_sub = 0;
while (str_pos < str_len && res_pos < result_size) {
int left = str_len - str_pos;
if (left < sub_len) {
int res_left = result_size - res_pos;
if (res_left < left)
return -1;
memcpy(result + res_pos, str + str_pos, left);
res_pos += left;
break;
}
if (!memcmp(str + str_pos, sub_str, sub_len)) {
str_pos += sub_len;
cnt_sub++;
} else {
result[res_pos++] = str[str_pos++];
}
}
if (res_pos >= result_size)
return -1;
result[res_pos] = '\0';
return cnt_sub;
}
int main(int argc, char *const argv[])
{
char s[100] = { '\0' };
int num = delete_sub_str("123abc12de234fg1hi34j123k", "123", s, 100);
if (num >= 0) {
printf("The number of sub_str is %d\n", num);
printf("The result string is %s\n", s);
}
return 0;
}
#include <stdio.h>
#include <string.h>
char s[256];
char *p;
int r,n,i;
int main() {
while (1) {
printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
fgets(s,256,stdin);
if ('\n'==s[0]) break;
p=s;
while (1) {
p=strstr(p,"%20");
if (p) {
memmove(p+1,p+3,strlen(p)-3+1);
p[0]=' ';
} else break;
}
p=s;
while (1) {
p=strstr(p,"你懂得");
if (p) {
memmove(p+6,p+6,strlen(p)-6+1);
for (i=0;i<6;i++) p[i]='X';
} else break;
}
printf("%s",s);
}
return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//