两个char*型数据相加

xuanfeng007 2008-11-07 12:10:08
我想问下怎么让两个char*类型的数据相加,char* A,char* B.就是把char*B 的数据放到char*A的数据后面,成为一个新的char*数据。
还有怎么才能把一个char*型数据放到一个数组中呢?
...全文
3620 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
elegant87 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 insulted 的回复:]
to elegant78(8楼):
你的程序很好很强大!
佩服佩服!
在下弱弱的问一句:
void Concat(SString &T,SString S1,SString S2);
void Strshow(SString T);
中的参数S1,S2,以及T能改成引用吗?即SString&,没有拷贝,就不会有构造啊,析构啊等,这样效率不是更高?

[/Quote]
一般情况下引用参数用在对象改变的时候,
如果调用函数的过程中不改变对象,用值传递就可了!
Qlaiaqu 2008-11-07
  • 打赏
  • 举报
回复
刚看了一篇好文:
char str1[15] = "hello";
char str2[15] = " world";

sprintf(strchr(str1,'\0'),"%s",str2);
此处有谁明白吗?很精巧吧!!!
elegant87 2008-11-07
  • 打赏
  • 举报
回复

//用数据结构的知识可以自己写函数的!
//调用库函数strcat()很方便的!
//我们自己写strcat()这个函数的功能岂不更好!

#include <stdio.h>
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1];

void StrAssign(SString &T,char *s); //生成一个值等于s的字符串

void Concat(SString &T,SString S1,SString S2);//S1和S2连接成T

void Strshow(SString T);

void main()
{
SString s,s1,s2;
char *str1="abcdeff";
char *str2="asfasfasg";
StrAssign(s1,str1);
Strshow(s1);
StrAssign(s2,str2);
Strshow(s2);
Concat(s,s1,s2);
Strshow(s);

}

void StrAssign(SString &T,char *s) //生成一个值等于s的字符串
{
size_t i,j,len=0;
for(i=0;s[i]!='\0';++i)
++len;
for(i=0,j=1;i!=len;++i,++j)
T[j]=s[i];
T[0]=len;//第一个存储字符串的长度
}

void Concat(SString &T,SString S1,SString S2) //S1和S2连接成T
{
int i,j;
if(S1[0]+S2[0]<=MAXSTRLEN)
{
for(i=1,j=1;i<=S1[0];++i,++j)
T[j]=S1[i];
for(i=1,j=S1[0]+1;i<=S2[0];++i,++j)
T[j]=S2[i];
T[0]=S1[0]+S2[0];
}
else
if(S1[0]<MAXSTRLEN)
{
for(i=1,j=1;i!=S1[0];++i,++j)
T[j]=S1[i];
for(i=1,j=S1[0]+1;i<=MAXSTRLEN;++i,++j)
T[j]=S2[i];
T[0]=MAXSTRLEN;
}
else
{
for(i=1,j=1;i<=MAXSTRLEN;++i,++j)
T[j]=S1[i];
T[0]=MAXSTRLEN;
}

}

void Strshow(SString T) //输出字符串
{
int i;
for(i=1;i<=T[0];++i)
printf("%c",T[i]);
printf("\n");
}
yuhudie203 2008-11-07
  • 打赏
  • 举报
回复
strcat

顶楼上的~
帅得不敢出门 2008-11-07
  • 打赏
  • 举报
回复

#include <iostream.h>
using namespace std;
int main()
{
char A[30] = "test";
char B[4] = "add";
strcat(A,B);//A要有足够空间扩展B中内容
cout << A << endl;
//第二种
char *a = "tttt";
char *b = "dddd";
char *dest = new char[strlen(a)+strlen(b)+1];
strcpy(dest,a);
strcat(dest,b);
cout << dest;
delete []dest;
//用string就很简单了 楼上已经有介绍了
return 0;
}

testadd
ttttdddd
liumingrong 2008-11-07
  • 打赏
  • 举报
回复

char* A = "hello";
char* B = "world";
char* C = (char*)new char(strlen(A) + strlen(B));
strcpy(C,(string(A)+B).c_str());
A = C;
太乙 2008-11-07
  • 打赏
  • 举报
回复
Example

/* STRCPY.C: This program uses strcpy
* and strcat to build a phrase.
*/

#include <string.h>
#include <stdio.h>

void main( void )
{
char string[80];
strcpy( string, "Hello world from " );
strcat( string, "strcpy " );
strcat( string, "and " );
strcat( string, "strcat!" );
printf( "String = %s\n", string );
}


Output

String = Hello world from strcpy and strcat!

太乙 2008-11-07
  • 打赏
  • 举报
回复
strcat??
wuyu637 2008-11-07
  • 打赏
  • 举报
回复
放到数组:


int main()
{
char *char1 = "edab";
char *char2 = "dfrey";


char destnation[100];

strcpy(destnation,char1);
cout << destnation << endl;
}

wuyu637 2008-11-07
  • 打赏
  • 举报
回复
int main()
{
char *char1 = "edab";
char *char2 = "dfrey";


string str1(char1);
string str2(char2);

string str3;
str3 = str1 + str2;
cout << str3 << endl;
}
alargel 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fengxuxing 的回复:]
刚看了一篇好文:
char str1[15] = "hello";
char str2[15] = " world";

sprintf(strchr(str1,'\0'),"%s",str2);
此处有谁明白吗?很精巧吧!!!
[/Quote]

----------------------------------------
也期待你的答案。
insulted 2008-11-07
  • 打赏
  • 举报
回复
看了一遍帖子,发现大家都是离不开系统提供的库函数strcpy(),strcat(),strlen(),能够熟练掌握系统提供的库函数于项目中当然是很好,而且在库函数中有你需要的功能的函数时候,库函数应该称为你的首选!因为库函数经历了时间和实践的考研!
但是在应聘中,这类题目往往考官要求应聘者不能使用库函数,自己来实现该功能!大家(指的是学生朋友和打算跳的朋友)最好平时也能有所针对性的训练。所以,8楼elegant87的答案,我个人建议lz应该给高分!

以上评论纯属个人意见,如有不妥,耽误大家时间,请嘴下留情!
insulted 2008-11-07
  • 打赏
  • 举报
回复
to elegant78(8楼):
你的程序很好很强大!
佩服佩服!
在下弱弱的问一句:
void Concat(SString &T,SString S1,SString S2);
void Strshow(SString T);
中的参数S1,S2,以及T能改成引用吗?即SString&,没有拷贝,就不会有构造啊,析构啊等,这样效率不是更高?
xmczr 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fengxuxing 的回复:]
刚看了一篇好文:
char str1[15] = "hello";
char str2[15] = " world";

sprintf(strchr(str1,'\0'),"%s",str2);
此处有谁明白吗?很精巧吧!!!
[/Quote]

这没什么难明白的啊!确实很巧!
cyj626 2008-11-07
  • 打赏
  • 举报
回复
高手说了好多方法了。
up
xtting_8984313 2008-11-07
  • 打赏
  • 举报
回复
字符串合并 strcat()

拷贝 memset()

具体怎么用google查找

建议lz在碰到此类问题随便gooogle一下,这样记忆才深刻啊!!!!
jia_xiaoxin 2008-11-07
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;

int main()
{
char * A = "Hello!";
char * B = " Kitty";
//两个char *类型的数据相加,必须分配足够大的空间用来存放连接后的数据
char * C = new char[strlen(A)+strlen(B)+1];
C[strlen(A)+strlen(B)] = '\0';
strcpy(C,A);
strcat(C,B);
A = C;
cout << A << endl;

//把char型数据放到数组中三种方式
char D[256];

//1.本身char型数据就直接可以当数组来使用

//2.使用循环
for(int i = 0; i < strlen(A); i++)
D[i] = A[i];

//3.使用字符串拷贝
strcpy(D, A);
cout << D << endl;
return 0;
}
星羽 2008-11-07
  • 打赏
  • 举报
回复

1)
int main()
{
char a[32] = "hello ";
char b[32] = "world";

strcat(a, b);

printf("%s\n", a);

return 0;
}

2)
int main()
{
char* p = "hello world";
char a[32];

strcpy(a, p);

printf("%s\n", a);

return 0;
}


xhs_lh04 2008-11-07
  • 打赏
  • 举报
回复
strcat(a,b);

sprintf(a, "%s%s", a, b);
yayafu 2008-11-07
  • 打赏
  • 举报
回复
strcat(a,b); // char *a+char *b
char buf[5];
memcpy(buf, a, 5); //char *a到数组
加载更多回复(1)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧