C语言练习作业(六)

来源:互联网 发布:工业普查排污数据 编辑:程序博客网 时间:2024/06/10 06:08

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


原题目是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
原创粉丝点击