设计一个指针函数,实现将字符串b连接到字符串a的后面

2024-11-20 10:16:03
推荐回答(3个)
回答1:

#include<stdio.h>

intmain()

chara[]="iamastudent.";

charb[20];

inti;

for(i=0;*(a+i)!='\0';i++)

(b+i)=*(a+i);

(b+i)='\0';

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

printf("stringbis:\n");

for(i=0;b[i]!='\0';i++)

printf("%c",b[i]);

printf("\n");

return0;

扩展资料:

举例:用指针将字符串a的内容复制到字符串b

#include<stdio.h>

#include<stdlib.h>

/**int main()

{

char a[]="i love you very mach!",b[100];

int i;

for(i=0;*(a+i)!='\0';i++)

{

*(b+i)=*(a+i);

}

*(b+i)='\0';

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

printf("b:");

for(i=0;*(b+i)!='\0';i++)

printf("%c",*(b+i));

printf("\n");

return 0;

}**/

/**下面用指针来处理这个问题**/

int main()

{

char a[]="i love you!",b[100];

char*p1,*p2;

p1=a;p2=b;

for(;*p1!='\0';p1++,p2++)

*p2=*p1;

*p2='\0';

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

printf("b:%s\n",b);

return 0;

}

回答2:

那就是C库中的strcat的功能, 直接给你它的源码吧,最标准的实现. 
char * strcat (char * dst, const char * src )
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}

回答3:

自己的srting,你看看:
#ifndef __CMYSTRING_H__
#define __CMYSTRING_H__

class MyString
{
public:
MyString();
MyString(const char *pStr);
MyString(const MyString &rStr);
~MyString();

int GetLen();
void SetString(const char *pStr);
const char *GetString();

bool operator==(const char *pStr);
bool operator==(const MyString &rStr);

char *operator+(const char *pStr);
char *operator+(const MyString &rStr);

void operator=(const char *pStr);
void operator=(const MyString &rStr);

private:
int StrLen(const char *pStr);
void StrCpy(const char *pStr);
bool StrCmp(const char *pStr);
char *StrCat(const char *pStr);

char *M_Str;
int M_len;

};
#endif

#include "StdAfx.h"
#include "CMyString.h"

MyString::MyString()
{
M_len = 0;
M_Str = NULL;
}
MyString::~MyString()
{
if(NULL != M_Str)
{
delete [] M_Str;
M_Str = NULL;
}
M_len = 0;
}

MyString::MyString(const char *pStr)
{
M_len = 0;
M_Str = NULL;
if(*pStr != NULL)
{
StrCpy(pStr);
}
}

MyString::MyString(const MyString &rStr)
{
M_len = 0;
M_Str = NULL;
if(rStr.M_Str != NULL)
{
StrCpy(rStr.M_Str);
}
}

int MyString::GetLen()
{
return M_len;
}
void MyString::SetString(const char *pStr)
{
if(*pStr != NULL)
{
StrCpy(pStr);
}
}
const char *MyString::GetString()
{
return M_Str;
}

bool MyString::operator==(const char *pStr)
{
if(pStr == NULL)
{
if(M_Str == NULL)
{
return true;
}
return false;
}
return StrCmp(pStr);
}

bool MyString::operator==(const MyString &rStr)
{
if(rStr.M_Str == NULL)
{
if(M_Str == NULL)
{
return true;
}
return false;
}

return StrCmp(rStr.M_Str);
}

char *MyString::operator+(const char *pStr)
{
if(pStr != NULL)
{
return StrCat(pStr);
}
return M_Str;
}

char *MyString::operator+(const MyString &rStr)
{
if(rStr.M_Str != NULL)
{
StrCat(rStr.M_Str);
}
return M_Str;
}

void MyString::operator=(const char *pStr)
{
if(pStr != NULL)
{
StrCpy(pStr);
}
}

void MyString::operator=(const MyString &rStr)
{
if(rStr.M_Str != NULL)
{
StrCpy(rStr.M_Str);
}
}

int MyString::StrLen(const char *pStr)
{
int nSize = 0;
while(*pStr != '\0')
{
nSize++;
pStr++;
}
return nSize;
}
void MyString::StrCpy(const char *pStr)
{
if(NULL != M_Str)
{
delete [] M_Str;
M_Str = NULL;
}
M_len = StrLen(pStr);
M_Str = new char[M_len + 1];
for(int i =0;i <= M_len;i++)
{
M_Str[i] = pStr[i];
}
}

bool MyString::StrCmp(const char *pStr)
{
if(M_len == StrLen(pStr))
{
for(int i = 0;i < M_len;i++)
{
if(M_Str[i] != pStr[i])
{
return false;
}
}
return true;
}
return false;
}
char *MyString::StrCat(const char *pStr)
{
int nSize = M_len + StrLen(pStr);
char *pTemp = new char[nSize + 1];
int i = 0;
for(i = 0;i < M_len; i++)
{
pTemp[i] = M_Str[i];
}
for(;i <= nSize ;i++)
{
pTemp[i] = pStr[i - M_len];
}

if(M_Str != NULL)
{
delete []M_Str;
M_Str = NULL;
}
M_Str = pTemp;
M_len = nSize;

return M_Str;
}