代码下的雨 2021-12-03 11:36 采纳率: 57.1%
浏览 21
已结题

该c语言的字符串替换问题怎么补充

#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来了解部分细节。

  • ```

```

  • 写回答

1条回答 默认 最新

  • CCodelab 2021-12-03 11:39
    关注

    看完这个得脑袋疼,先把格式整理好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月5日
  • 已采纳回答 4月27日
  • 请提交代码 12月3日
  • 创建了问题 12月3日

悬赏问题

  • ¥15 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备