#include<stdio.h> #define MaxLen 100 typedef struct { char str[MaxLen]; int curl

我想把串t联接在串s的后面,结果不行,请高手帮我指点一下。
#include<stdio.h>
#define MaxLen 100
typedef struct
{
char str[MaxLen];
int curlen;
}string;

string Concat(string *s,string *t)
{
int i;
string ch;
ch.curlen=s->curlen+t->curlen;
for(i=0;i<s->curlen;i++)
ch.str[i]=s->str[i];
for(i=0;i<t->curlen;i++)
ch.str[s->curlen+i]=t->str[i];
return ch;
}
int main()
{
int i;
string s,t,ch;
s.curlen=10;
ch.curlen=30;
scanf("%s",&s.str);
t.curlen=5;
scanf("%s",&t.str);
ch=Concat(&s,&t);
printf("%s\n",ch.str);
}
最新回答
踮起脚╮亲伱

2024-04-18 04:01:19

#include <stdio.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize];
int len; //串长
} SqString;
void StrAssign(SqString &str,char cstr[]) //str为引用型参数
{
int i;
for (i=0;cstr[i]!='\0';i++)
str.data[i]=cstr[i];
str.len=i;
}
void StrCopy(SqString &s,SqString t) //s为引用型参数
{
int i;
for (i=0;i<t.len;i++)
s.data[i]=t.data[i];
s.len=t.len;
}
int StrLength(SqString s)
{
return s.len;
}
SqString Concat(SqString s,SqString t)
{
SqString str;
int i;
str.len=s.len+t.len;
for (i=0;i<s.len;i++) //将s.data[0]~s.data[s.len-1]复制到str
str.data[i]=s.data[i];
for (i=0;i<t.len;i++) //将t.data[0]~t.data[t.len-1]复制到str
str.data[s.len+i]=t.data[i];
return str;
}
SqString SubStr(SqString s,int i,int j)
{
SqString str;
int k;
str.len=0;
if (i<=0 || i>s.len || j<0 || i+j-1>s.len)
return str; //参数不正确时返回空串
for (k=i-1;k<i+j-1;k++) //将s.data[i]~s.data[i+j]复制到str
str.data[k-i+1]=s.data[k];
str.len=j;
return str;
}
void DispStr(SqString s)
{
int i;
if (s.len>0)
{
for (i=0;i<s.len;i++)
printf("%c",s.data[i]);
printf("\n");
}
}
SqString invert(SqString &s) //例6-2的算法
{
SqString s1,s2;
if (StrLength(s)>0)
{
s1=invert(SubStr(s,2,StrLength(s)-1));
s2=Concat(s1,SubStr(s,1,1));
}
else
StrCopy(s2,s);
return s2;
}
void main()
{
SqString s,t;
StrAssign(s,"abcd1234");
printf("s:");DispStr(s);
printf("s->t\n");
t=invert(s);
printf("t:");DispStr(t);
猫街少女

2024-04-18 04:42:16

我是个新手,咱交流一下
请你先想清楚你想干什么,写Concat这个函数是为了什么,用strcat是不是更容易?
根据你程序表面来看并且不考虑逻辑错误的话,你希望最终输出的是一个10+30=40个字符的字符串,和你scanf输入的数量无关
Concat函数没考虑输入的字符串长度如果大于curlen或者小于curlen时怎么办,大于curlen时,输入的字符串会被截断,for循环只能取到curlen个字符;小于curlen时,for循环中的str数组下标越界,没人知道将会取到什么东西
再就是数组用之前没有初始化,即使非要用concat中你希望的处理方法也还得考虑‘\0’的存在
释放

2024-04-18 01:38:55

正确代码如下:
#include<stdio.h>

#define MaxLen 100

typedef struct
{
char str[MaxLen];
int curlen;
}string;

string Concat(string *s,string *t)
{
int i;
string ch;
ch.curlen=s->curlen+t->curlen;
for(i=0; i<s->curlen; i++)
ch.str[i]=s->str[i];
for(i=0;i<t->curlen;i++)
ch.str[s->curlen+i] = t->str[i];
ch.str[ch.curlen] = '\0';
return ch;
}
int main()
{
//int i;
string s,t,ch;
s.curlen=10;
ch.curlen=30;
scanf("%s",s.str);
t.curlen=5;
scanf("%s",t.str);
ch=Concat(&s,&t);
printf("%s\n",ch.str);
return 0;
}
追问
有错误呀,你有没有调试过
柠七菇凉

2024-04-18 00:23:32

这是C语言里面的习题吧