编程题。。编写一个函数去掉字符串a中的子字符串b,将a替换为新的字符串并输出。

编写一个函数去掉字符串a中的子字符串b,将a替换为新的字符串并输出。例如a为"abcabcd",b为"bc",则调用该函数后,a为"aad" ,删除和输出都在该函数内完成。

输入:
string a,string b输入a原始串,b为要删除的子串

输出:
void dels(string a,string b),用cout输出删除子串之后的字符串

举例:
函数输入"I am and student.","nd",输出的结果是"I am a student."

/*这应该就是你要的*/
#include <stdio.h>
#include <string.h>

#define SIZE 100   //字符串大小 

void dels(char a[], char b[]);

int main()
{
    char str1[SIZE] = "\0";    //初始化字符串; 
    char str2[SIZE] = "\0";    //初始化你要删除的子字符串; 
    size_t len_des = 0;
    
    gets(str1);   //输入你要的字符串,如果有现成的可以删了这行; 
    gets(str2);   //输入你要删除的字符串,如有同上; 
    dels(str1,str2);   //调用函数删除并输出; 
    printf("\n");   //为了好看,加个回车; 
    return 0;
}

void dels(char a[], char b[])  //该函数用来删除指定的子串
{
    size_t len_b = strlen(b);  //要删除的字符串长度; 
    
    for(size_t i = 0; a[i] != '\0';)   
    {
        if(strncmp(&a[i], b, len_b) == 0)  //调用strncmp函数从 a[i] 的位置与 b 比较 
            i += len_b;   //如有相同,使 i 加 len_b , 下次从这个位置检查; 
        else
        {
            putchar(a[i]);   //输出不相同的地方; 
            i++;    
        } 
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-25
#include <stdio.h>
#include <cstring.h>
#include <malloc.h>
#include <memory.h>
#include <iostream>

void dels(char *, char *);

void dels(char *a, string *b)
{
    char *result = (char *)alloca(strlen(a) - strlen(b) + 1);
    int i = 0;
    int j = strstr(a, b);
    while(1)
    {
        if(i == j)
            i += strlen(b) + 1;
        if(a[i] == 0)
            break;
        result[i] = a[i++];
    }
    std::cout << result << std::endl;
}

本回答被网友采纳
相似回答