用C 语言输出,求问各位大佬这个该怎么写(如果能给出完整代码就更好了。。)?

用C 语言输出,求问各位大佬这个该怎么写(如果能给出完整代码就更好了。。)?

问题描述:

编写函数 void duplicate(char *s, char *c) ,
         该函数完成字符重复的功能:
         在函数中对s字符串操作,c用来指明要重复的单个字符;
         并在main(.)函数中测试该函数(输入输出均在main函数中进行)。

 界面如下:

请输入一个字符串:shanghai fudan<回车>
请输入一个字符:a<回车>
更新后的字符串为:shaanghaai fudaan

其中 第一行的shanghai fudan及第二行的a为用户输入,
其他为程序输出。
效果是把字符串(如shanghai fudan)中某个指定的字符(如a)重复一次,如变成shaanghaai fudaan。

#include <stdio.h>
#include <stdlib.h>
char s[100];
void duplicate(char *s, char *c){
    while(*s!='\0'){
        printf("%c",*s);
        if(*s==c)
            printf("%c",*s);
        *s++;
    }
}
int main()
{
    int i;
    char c;
    scanf("%s",&s);
    getchar();
    scanf("%c",&c);
    duplicate(s,c);

    return 0;
}

 用strok去切割,用sprintf去组装。

#include <stdio.h>
#include <string>
using namespace std;
#pragma warning(disable:4996)

void duplicate(char* s, char* c) {
	if (s == NULL || c == NULL) {
		return;
	}
	char* ptr;
	char* res = new char[1000]{ 0 };
	ptr = strtok(s, c);
	char* tmp = new char[1000];
	char* dou = new char[1000];
	do
	{
		printf("切割元素: %s\n", ptr);
		sprintf(tmp, "%s\0", ptr);
		sprintf(dou, "%s%s\0", c,c);
		sprintf(res, "%s%s%s\0", res, tmp, dou);
		ptr = strtok(NULL, c);
	
	} while (ptr != NULL);
	res[strlen(res) - 2] = '\0';
	printf("最终元素: %s\n", res);
}

int main() {
	char* arrs = new char[1000]{ "shanghai fudan" };
	char* p = new char[1000]{ "a" };



	duplicate(arrs, p);
	return 0;
}
切割元素: sh
切割元素: ngh
切割元素: i fud
切割元素: n
最终元素: shaanghaai fudaan

创建一个新字符串,把内容拷贝到新字符串的时候先判断是否等于输入字符,相等就加入新字符串。

供参考:

#include <stdio.h>
#include <stdlib.h>

void duplicate(char *s, char *c)
{
    char *p,*q;
    char *tmp = (char *)malloc(sizeof(char)*100);
    p = s; q = tmp;
    while(*p){
        if(*p == *c) *q++ = *p;
        *q++ = *p++;
    }
    *q = '\0';
    while(*s++ = *tmp++); *s = '\0';
    free(tmp);
}

int main()
{
    char c, s[100];
    gets(s);
    scanf("%c",&c);

    duplicate(s,&c);

    puts(s);
    
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632