代码下的雨 2021-12-07 13:12 采纳率: 50%
浏览 22
已结题

这段子串替换的代码怎么补全啊,急,

#include <stdio.h>#define MaxSize 100 //串中最多字符个数typedef struct{ char data[MaxSize]; //存放串字符 int length; //存放串的实际长度} SqString; //顺序串类型void Assign(SqString &s,char str[]) //串赋值{ int i=0; while (str[i]!='\0') //遍历str的所有字符 { s.data[i]=str[i]; i++; } s.length=i;}void DestroyStr(SqString s) //销毁串{ }void StrCopy(SqString &s,SqString t) //串复制{ int i; for (i=0;i<t.length;i++) s.data[i]=t.data[i]; s.length=t.length;}int StrLength(SqString s) //求串长{ return(s.length);}int StrEqual(SqString s,SqString t) //判断串相等{ int i=0; if (s.length!=t.length) //串长不同时返回0 return(0); else { for (i=0;i<s.length;i++) if (s.data[i]!=t.data[i]) //有一个对应字符不同时返回0 return 0; return 1; }}SqString Concat(SqString s,SqString t) //串连接{ SqString r; int i,j; for (i=0;i<s.length;i++) //将s复制到r r.data[i]=s.data[i]; for (j=0;j<t.length;j++) //将t复制到r r.data[s.length+j]=t.data[j]; r.length=i+j; return r; //返回r}SqString SubStr(SqString s,int i,int j) //求子串{ SqString t; int k; if (i<1 || i>s.length || j<1 || i+j>s.length+1) t.length=0; //参数错误时返回空串 else { for (k=i-1;k<i+j;k++) t.data[k-i+1]=s.data[k]; t.length=j; } return t;}int Index(SqString s,SqString t) //串匹配{ int i=0,j=0; //i和j分别扫描主串s和子串t while (i<s.length && j<t.length) { if (s.data[i]==t.data[j]) //对应字符相同时,继续比较下一对字符 { i++; j++; } else //否则,主子串指针回溯重新开始下一次匹配 { i=i-j+1; j=0; } } if (j>=t.length) return i-t.length+1; //返回第一个字符的位置 else return 0; //返回0}int InsStr(SqString &s,int i,SqString t) //子串插入{ //将该函数中的代码补齐}int DelStr(SqString &s,int i,int j) //子串删除{ int k; if (i<1 || i>s.length || j<1 || i+j>s.length+1) return 0; //位置参数值错误 else { for (k=i+j-1;k<s.length;k++) //将s的第i+j位置之后的字符前移j位 s.data[k-j]=s.data[k]; s.length=s.length-j; //修改s的长度 return 1; //成功删除返回1 }}SqString RepStrAll(SqString s,SqString s1,SqString s2) //子串替换{ //将该函数中的代码补齐}void DispStr(SqString s) //输出串{ int i; for (i=0;i<s.length;i++) printf("%c",s.data[i]); printf("\n");}void main() //主函数{ SqString s1,s2,s3,s4,s5,s6,s7; Assign(s1,"abcd"); printf("s1:");DispStr(s1); printf("s1的长度:%d\n",StrLength(s1)); printf("s1=>s2\n"); StrCopy(s2,s1); printf("s2:");DispStr(s2); printf("s1和s2%s\n",(StrEqual(s1,s2)==1?"相同":"不相同")); Assign(s3,"12345678"); printf("s3:");DispStr(s3); printf("s1和s3连接=>s4\n"); s4=Concat(s1,s3); printf("s4:");DispStr(s4); printf("s3[2..5]=>s5\n"); s5=SubStr(s3,2,4); printf("s5:");DispStr(s5); Assign(s6,"567"); printf("s6:");DispStr(s6); printf("s6在s3中位置:%d\n",Index(s3,s6)); printf("从s3中删除s3[3..6]字符\n"); DelStr(s3,3,4); printf("s3:");DispStr(s3); printf("从s4中将s6替换成s1=>s7\n"); s7=RepStrAll(s4,s6,s1); printf("s7:");DispStr(s7); DestroyStr(s1); DestroyStr(s2); DestroyStr(s3); DestroyStr(s4); DestroyStr(s5); DestroyStr(s6); DestroyStr(s7);}2.修改参考程序:(1)参照参考程序中的代码,增加一个函数int myIsDigit(char c):该函数实现的功能是判断字符c是否为数字(注意不能使用系统函数int isdigit(char c)), 当c为数字字符0-9时,返回非零值,否则返回-1。 (2)参照参考程序中的代码,增加一个函数int myAtoi(SqString s):该函数实现的功能是将字符串s转换成整数(注意不能使用系统函数atoi)。函数返回 int 值,此值由将输入字符作为数字解析而生成。myAtoi函数会扫描参数s字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。如果该输入无法转换为该类型的值,则函数的返回值为 0,当第一个字符不能识别为数字时,函数将停止读输入字符串。提示:如果myAtoi函数功能的需求还不是很了解,可以通过调用系统函数atoi来了解部分细节。

  • ```

```

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-12-07 13:14
    关注

    用代码块格式化一下吧。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月5日
  • 已采纳回答 4月27日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 webstorm上开发的vue3+vite5+typeScript打包时报错
  • ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
  • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决