C语言练习作业(六)

慢慢地,对指针的理解也深入了一些,这次的作业没事先参考答案,感觉很有成就感。


原题目是C语言程序设计书上第8.7练习题,我稍微改了一些,让这个程序更加通用。


题目:将字符串b的部分连续字符复制到字符串a的指定位置并覆盖,输出字符串a。参与替换与被替换的起始位置由用户指定,如果输入的位数不对,则提醒用户重新输入。如果参与替换的字符多于被替换的字符,则舍去多余部分(不舍掉的功能现在懒得做);如果参与替换的字符少于被替换的字符,则将字符串a多出来的字符删掉,后面的字符前移。


其中判断输入起始位置是否正确并让用户重新输入的功能,因为没想起来更好而且简单的方法,就直接用了goto语句,我知道这样不好,不过在这里用一下应该没什么事吧。


#include<stdio.h>
#include<string.h>

void myStrCpy(char *myStringA, char *myStringB, int mA, int mB, int nA, int nB);

int main()
{
	int mA = 0, mB = 0, nA = 0, nB = 0;
	char myStringA[100];
	char myStringB[100];
	printf_s("请输入字符串a:\n");
	//scanf_s("%s", myStringA,99);
	gets_s(myStringA, 99);
	printf_s("请输入字符串b:\n");
	gets_s(myStringB, 99);
	//scanf_s("%s", myStringB,99);
	A: printf_s("字符串a的第几位到第几位将被替换?\n");
	scanf_s("%d,%d", &mA, &nA);
	if (mA >= nA)
	{
		printf_s("错误的位数。\n");
		goto A;
	}
	B: printf_s("字符串b的第几位到第几位将参与替换?\n");
	scanf_s("%d,%d", &mB, &nB);
	if (mB >= nB)
	{
		printf_s("错误的位数。\n");
		goto B;
	}
	myStrCpy(myStringA, myStringB, mA, mB, nA, nB);
	printf_s("%s", myStringA);

	return 0;
}

void myStrCpy(char *myStringA, char *myStringB, int mA, int mB, int nA, int nB)
{
	char *pA, *pB, *pX;
	int t = 0;
	int lengthA = 0;
	lengthA = strlen(myStringA);
	pA = myStringA + mA - 1;
	pB = myStringB + mB - 1;
	pX = myStringA + nA;
	char myStringC[100];
	for (int i = 0;pB < myStringB + nB + 1;pB++, i++)
	{
		myStringC[i] = *pB;
		t = i;
	}
	for (int i = 0;i <= (nA - mA);pA++)
	{
		*pA = myStringC[i];
		i++;
		if (i >= (t + 1) && (nA - mA)>(nB - mB))         //如果字符串全部复制完成,而字符串a仍有需要替换却没被覆盖掉的字符,则把这些字符删掉
		{
			for (int j = 0;j < lengthA - nA + 1;j++)
			{
				*(pX - ((nA - mA) - (nB - mB))) = *pX;
				pX++;
			}
			break;
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值