c++ 用链表连接两个字符串

用链表实现:将字符串t复制到字符串s的末端,并且返回新的字符串的首地址,并编写主程序输出。
例:(括号内为说明)
输入abc def
输出abcdef

#include <iostream>
#include <string>
using namespace std;
struct str{
char c;
struct str *next;
};
struct str *s,*t,*head;

int main(){
struct str *f(struct str *s,struct str *t);
s=f(s,t);
while(s!=NULL){
cout<<s->c;
s=s->next;
}
return 0;
}

struct str *f(struct str *s,struct str *t){
head=s=new str;
cin>>s->c;
while(s->c!='/n'){
s=s->next=new str;
cin>>s->c;
}
t=s->next=new str;
cin>>t->c;
while(t->c!='/n'){
t=t->next=new str;
cin>>t->c;
}
return head;
}
=====================================
运行后一直在输入。。。不知道哪里错了
struct str *f(struct str *s,struct str *t){
head=s=new str;
cin>>s->c;
while(s->c!='\n'){
s=s->next=new str;
cin>>s->c;
}
t=s;
cin>>t->c;
while(t->c!='\n'){
t=t->next=new str;
cin>>t->c;
}
t=NULL;
return head;
}
这是改的,可还是一直输入。。。

/*
* 1.NULL,即'\0'在数值上等于0
* 2.cout<< 遇到'\0'才会结束
* 3.cin>> 忽略'\n'
*/
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
struct str
{
char c;
struct str *next;
};
struct str *s,*t,*head;

int main()
{
struct str *f(struct str *s,struct str *t);
s=f(s,t);
while(s->c != 0)
{
cout.put(s->c); // cout<< 改为 cout.put, 因为<<操作遇到'\0'才结束
s=s->next;
}
return 0;
}

struct str *f(struct str *s,struct str *t)
{
head=s=new str;
cin.get(s->c);  // 将 cin>> 改成了cin.get(char), 因为>>不读取'\n' 下面的依次
while(s->c!='\n')
{
s=s->next=new str;
cin.get(s->c);
}
t=s;
cin.get(t->c);
while(t->c!='\n')
{
t=t->next=new str;
cin.get(t->c);
}
// 地址最好严禁设置成'\0',因为地址的0x00000000严禁被应用程序访问
// 所以这里我把c看成标志位,设置成'\0'
t->c = 0;
return head;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-09
有两个地方错了。
第一,cin>>s->c这样的cin会忽略一切空白符,所以你读取不到回车这个符号。要改成cin.get(s->c);

所有的都要改。
第二,‘/n’改成'\n'
另外你的逻辑还有点问题,你改好这个再调试别的。本回答被网友采纳
第2个回答  2014-05-09
#include <iostream>
#include <string>
using namespace std;

struct str
{
char c;
struct str *next;
};
struct str *s,*t,*head;

int main()
{
struct str *f(struct str *s,struct str *t);
struct str *d(struct str *s);

s=f(s,t);
while(s!=NULL)
{
cout<<s->c;
s=s->next;
}
/* 结尾记得释放内存 */
head = d(head);
return 0;
}

struct str *f(struct str *s,struct str *t)
{
char temp = 0;
head=s=new str;
cin>>temp;
s->c = temp;
s->next = NULL;
cin>>temp;
while(temp!='0')
{
s=s->next=new str;
s->c = temp;
s->next = NULL;
cin>>temp;
}
temp = 0;
t=s;
cin>>temp;
while(temp!='0')
{
t=t->next=new str;
t->c = temp;
t->next = NULL;
cin>>temp;
}
t=NULL;
return head;
}

struct str *d(struct str *s)
{
struct str *t = NULL;

t = s;
while(NULL != s)
{
s = s->next;
delete t;
t = s;
}
return s;
}

相似回答