Code Bye

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

静态存储串,用串的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;
}
解决方案

60

if (Strlength(T1) + Strlength(S2) < MAX_PATH)中的MAX_PATH是啥?
代码功能归根结底不是别人帮本人看或讲解或注释出来的;而是被本人静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

10

VS IDE中,在不清楚的符号上点鼠标右键,选转到定义。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于数据结构串操作求帮忙指出问题在哪