c语言编程题
从键盘输入3个字符串,每个字符串以回车符作为结束标志,将三个字符串以输入先后顺序合并到字符串s中。...
从键盘输入3个字符串,每个字符串以回车符作为结束标志,将三个字符串以输入先后顺序合并到字符串s中。
展开
展开全部
#include
#include
#include
#include
#include
//定义二叉树节点数据结构
typedef
struct
node{
struct
node
*lchild;
char
data;
struct
node
*rchild;
}bitnode,*bitree;
//构造截取子串函数,start从零开始.
char
*get_substr(char
*strDest,int
start,int
end)
{
if(start>end)
return
NULL;
//如果左子树或右子树为空则返回空串
char
*strSub;
//字串指针
strSub=(char*)malloc((end-start+2)*sizeof(char));
int
i;
for(i=start;i<=end;i++)
strSub[i-start]=strDest[i];
strSub[end-start+1]='\0';
return
strSub;
}
//前序遍历二叉树,并输出
void
preorder_traverse(bitree
bt){
if(bt
!=
NULL)
{
printf("%c",bt->data);
preorder_traverse(bt->lchild);
preorder_traverse(bt->rchild);
}
}
//根据中序和后序遍历结果递归构造二叉树,并返回根指针
bitree
create_bitree(char
*inorder,char
*postorder)
//inorder和postoeder分别为中序和后序遍历的结果字符串
{
if(inorder==NULL
||
postorder==NULL)
return
NULL;
//空串则返回空树
char
root_data;//根节点字符
char
*lchild_instr,*lchild_postr,*rchild_instr,*rchild_postr;//左子树和右子树中序及后序字符串
int
i,len;
len=strlen(inorder);
//中序和后序字符串长度相等
bitree
new_bitree=(bitree)malloc(sizeof(bitnode));
root_data=postorder[len-1];//树的根节点必然为中序遍历的最后一个字符
new_bitree->data=root_data;
for(i=0;i<len;i++)
//找到根节点在中序遍历中位置
{
if(inorder[i]==root_data)
break;
}
//确定左子树和右子树中序及后序字符串
lchild_instr=get_substr(inorder,0,i-1);
lchild_postr=get_substr(postorder,0,i-1);
rchild_instr=get_substr(inorder,i+1,len-1);
rchild_postr=get_substr(postorder,i,len-2);
//递归构造子树
new_bitree->lchild=create_bitree(lchild_instr,lchild_postr);
new_bitree->rchild=create_bitree(rchild_instr,rchild_postr);
return
new_bitree;
}
void
main(){
char
inorder[20]="BDCEAFHG";
char
postorder[20]="DECBHGFA";
bitree
root;
root=create_bitree(inorder,postorder);
//输出前序遍历结果
printf("the
binary
tree
in
preorder
is:\n");
preorder_traverse(root);
_getch();
}
//满意的话别忘了多加点分哈
#include
#include
#include
#include
//定义二叉树节点数据结构
typedef
struct
node{
struct
node
*lchild;
char
data;
struct
node
*rchild;
}bitnode,*bitree;
//构造截取子串函数,start从零开始.
char
*get_substr(char
*strDest,int
start,int
end)
{
if(start>end)
return
NULL;
//如果左子树或右子树为空则返回空串
char
*strSub;
//字串指针
strSub=(char*)malloc((end-start+2)*sizeof(char));
int
i;
for(i=start;i<=end;i++)
strSub[i-start]=strDest[i];
strSub[end-start+1]='\0';
return
strSub;
}
//前序遍历二叉树,并输出
void
preorder_traverse(bitree
bt){
if(bt
!=
NULL)
{
printf("%c",bt->data);
preorder_traverse(bt->lchild);
preorder_traverse(bt->rchild);
}
}
//根据中序和后序遍历结果递归构造二叉树,并返回根指针
bitree
create_bitree(char
*inorder,char
*postorder)
//inorder和postoeder分别为中序和后序遍历的结果字符串
{
if(inorder==NULL
||
postorder==NULL)
return
NULL;
//空串则返回空树
char
root_data;//根节点字符
char
*lchild_instr,*lchild_postr,*rchild_instr,*rchild_postr;//左子树和右子树中序及后序字符串
int
i,len;
len=strlen(inorder);
//中序和后序字符串长度相等
bitree
new_bitree=(bitree)malloc(sizeof(bitnode));
root_data=postorder[len-1];//树的根节点必然为中序遍历的最后一个字符
new_bitree->data=root_data;
for(i=0;i<len;i++)
//找到根节点在中序遍历中位置
{
if(inorder[i]==root_data)
break;
}
//确定左子树和右子树中序及后序字符串
lchild_instr=get_substr(inorder,0,i-1);
lchild_postr=get_substr(postorder,0,i-1);
rchild_instr=get_substr(inorder,i+1,len-1);
rchild_postr=get_substr(postorder,i,len-2);
//递归构造子树
new_bitree->lchild=create_bitree(lchild_instr,lchild_postr);
new_bitree->rchild=create_bitree(rchild_instr,rchild_postr);
return
new_bitree;
}
void
main(){
char
inorder[20]="BDCEAFHG";
char
postorder[20]="DECBHGFA";
bitree
root;
root=create_bitree(inorder,postorder);
//输出前序遍历结果
printf("the
binary
tree
in
preorder
is:\n");
preorder_traverse(root);
_getch();
}
//满意的话别忘了多加点分哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i = 0;
char a[3][32] = {{0}};//定义一个2维数组 3组字符串 每组最大32字符
char s[128] = {0}; //字符串合并后的s字符串 理论上长度大于3*32就可以了
for (i = 0; i < 3; i++)
{
//监听stdin也就是键盘输入
fgets(a[i], 32, stdin);
//由于fgets会把回车也获取出来 所以字符串的最后一个回车换成字符串的结束符'\0'
a[i][strlen(a[i])-1] = '\0';
//将获取到的字符串拼接到s后面
strcat(s, a[i]);
}
printf("[%s]\n", s);//将s打印出来
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
char s[1024];
int i=0,c=0;
while(c<3)
{
s[i]=getchar();
if('\n'==s[i])
c++;
else
{
i++;
}
}
s[i]='\0';
puts(s);
return 0;
}
int main()
{
char s[1024];
int i=0,c=0;
while(c<3)
{
s[i]=getchar();
if('\n'==s[i])
c++;
else
{
i++;
}
}
s[i]='\0';
puts(s);
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for int i=0;i<3;i++
cin>>a
s+=a
print(s)
追问
全面一点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询