关于数据结构串操作求大神帮忙指出问题在哪~~

qq_36100235 2016-10-17 10:59:18
静态存储串,用串的5种基本操作来解决这个 插入串的问题;
当串T插入到串S中时,有两种情况 S串和T串的长度小于MAX,和大于MAX,大于MAX时 要对多出的部分进行截断;

我编译没错,但是结果却不堪入目;求大神指点!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2

#define MAX 255
typedef int Status;
typedef int ElemType;
typedef unsigned char SString[MAX+1];
Status StrAssign(SString T,char chars[]){
int i;
if(strlen(chars)>MAX)
return ERROR;
T[0]=strlen(chars);
for(i=0;i<=T[0];i++){T[i+1]=chars[i];}
return OK ;
}
Status Strlength(SString S)
{
int i,j=0;
for(i=0;S[i+1]!='\0';i++)
j++;
return j;
}
Status SubString(SString Sub,SString S,int pos,int len){
int i=0;
if(pos<0||pos>Strlength(S)||len<0)
return ERROR;
for(i=0;i<len;i++)
{
Sub[i+1]=S[pos];
pos++;
}
return 0;
}
Status Concat(SString T,SString S1,SString S2)
{
int i,j,k;
k=0;

for(i=0;S1[i+1]!='\0';i++)
{T[k+1]=S1[i+1];k++;}
for(j=0;S2[j+1]!='\0';j++)
{T[k+1]=S2[j+1];k++;}
return OK;
}

void StrPrint(SString S){
int i;
for(i=1;i<=S[0];i++)
{
printf("%c",S[i]);
}
printf("\n");
}



int main()
{
int pos,len;
SString S1,S2,T1,T2,T3;
char chars[MAX],chars1[MAX];
printf("put in 字符串: ");
scanf("%s",chars);
printf("put in 要插入的字符串: ");
scanf("%s",chars1);
StrAssign(S1,chars);
StrAssign(S2,chars1);
printf("输入插入位置POS : ");
scanf("%d",&pos);
Strlength(S1);
Strlength(S2);
if(Strlength(S1)+Strlength(S2)<MAX)
{


SubString(T1,S1,1,pos-1);

len=Strlength(S1)-pos+1;
SubString(T2,S1,pos,len);

Concat(T3,T1,S2);
Concat(T3,T3,T2);
StrPrint(T3);
return OK;

}

if(Strlength(S1)+Strlength(S2)>MAX)
{
SubString(T1,S1,1,pos-1);
if(Strlength(T1)+Strlength(S2)>MAX)
{
pos=Strlength(S2)-MAX+Strlength(T1)+Strlength(S2)-1;
SubString(T2,S2,1,pos-1);
Concat(T3,T1,T2);
StrPrint(T3);
}
if(Strlength(T1)+Strlength(S2)<MAX_PATH)
{ len=Strlength(S1)-Strlength(T1);
SubString(T2,S1,pos,len);
len=MAX-Strlength(T1)-Strlength(S2)+1;

SubString(T3,S1,pos,len);
Concat(T1,T1,S2);
Concat(T2,T1,T3);
StrPrint(T2);

}
}

return 0;
}
...全文
223 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-18
  • 打赏
  • 举报
回复
VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
qq_36100235 2016-10-18
  • 打赏
  • 举报
回复
debug调试,不是很熟悉,还在学;if (Strlength(T1) + Strlength(S2) < MAX_PATH)中的MAX_PATH这是写错的 ,是宏定义的MAX 我自己很乱 所以才让大神指点一下 我
小灸舞 版主 2016-10-18
  • 打赏
  • 举报
回复
if (Strlength(T1) + Strlength(S2) < MAX_PATH)中的MAX_PATH是啥?
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
qq_36100235 2016-10-18
  • 打赏
  • 举报
回复
我用的是CODEblocks

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧