#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;
}
那就是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 */
}
自己的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;
}