代码下的雨 2021-12-03 11:36 采纳率: 20%
浏览 13

该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条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 请提交代码 12月3日
      • 创建了问题 12月3日

      悬赏问题

      • ¥30 AndroidBench&eMMC内存测试速度&Android
      • ¥15 W10 文件共享失败 怎么解决
      • ¥20 b站私信完整导出的方法
      • ¥15 边界图中的x、y轴解释
      • ¥30 如何用matlab求解复杂方程
      • ¥15 VUE TS中怎么调用第三方js
      • ¥15 Activiti如何将值传入textValue
      • ¥20 在linux里安装lummps时 在make mpi里找不到rpc
      • ¥25 python先到先得调度和轮询调度
      • ¥15 SDK Manager闪退