我想把串t联接在串s的后面,结果不行,请高手帮我指点一下。#include<stdio.h>#define MaxLen 100typedef 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);}
#include <stdio.h>#define MaxSize 100typedef 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);
我是个新手,咱交流一下请你先想清楚你想干什么,写Concat这个函数是为了什么,用strcat是不是更容易?根据你程序表面来看并且不考虑逻辑错误的话,你希望最终输出的是一个10+30=40个字符的字符串,和你scanf输入的数量无关Concat函数没考虑输入的字符串长度如果大于curlen或者小于curlen时怎么办,大于curlen时,输入的字符串会被截断,for循环只能取到curlen个字符;小于curlen时,for循环中的str数组下标越界,没人知道将会取到什么东西再就是数组用之前没有初始化,即使非要用concat中你希望的处理方法也还得考虑‘\0’的存在
正确代码如下:#include<stdio.h>#define MaxLen 100typedef 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;} 追问 有错误呀,你有没有调试过