1. 程式人生 > >C++學習筆記6_字符串

C++學習筆記6_字符串

tr1 默認 class vat 操作符函數 istream 變量 有效 sdf

1. C語言的字符串,char * s = "aaaa";
#include<string>
class Test
{
public :
Test(int a, char*name)
{
this->a=a;
int len = strlen(name);
this->name=new char[len+1];
strcpy(this->name,name);
}
~Test()
{
if(this->name!=NULL)
{
delete name;
name =NULL;
}
}
private:
int a;
char* name;
}
// strlen("123")只是字符串的有效長度,不是實際長度,實際是"123\0",區別於sizeof("123"),sizeof只是數據類型的大小,"asdfadsf"的數據類型是char*,sizeof("123")是指sizeof(typeof(*char))


2. C++的字符串
//如果是c++的字符串,那麽
string name;
//這個name值就是string的對象。
那麽,構造函數,可以為
Test(int a, char*name)
{
this->name = name;//如果name沒有初值,應該是調用拷貝構造函數;如果有初值,應該是調用=操作符函數;
}

3. string對象包裹了char* 變量;
int main(void)
{
stirng s1="123";
stirng s2="456";
string s3 =s1+s2;//調用了+操作符函數
s1[1]=‘x‘;//重載[]操作符
cout<<s1<<endl;//重載<<操作符
}

4. string 類型重寫了>>號操作符,要調用cin>>str,也要include<string>
istream & operator>>(istream & ins,string &str)
{
if(str.str!=NULL)
{
delete[] str.str;
str.str=NULL;
}
char temp_str[4096]={0};
cin>>temp_str;//char*默認就有重寫>>號的。
s.str=new char[strlen(temp_str)+1];
strcpy(s.str,temp_str);
return ins;
}

5.char *strcat(char *dest, const char *src);//往字符串最後空白的地方追加字符串
註意,在使用strcat(str1,"aaaaa");的時候,str1一定要有初始值,不然不知道追加到哪裏了
int main(void){
char *str1 = new char[10]{0};//new char[10]{‘\0‘}這樣可能可以。
memset(temp.str,0,10);
strcat(str1,"aaaaa");
strcat(str2,"bbbb");
}
//如果使用strcpy就不用

C++學習筆記6_字符串