c++初级 之 c++的字符串string

在c++中,可以直接用string类型的量。必须包含头文件#include<string>(当然不要忘了using namespace std;)

string类属于标准模板库(STL),可以看作是系统预先写好的一个类,目的是为了简化对字符串的操作,我们可以实例化出string的对象然后进行一系列操作。

操作可以参考c++字符串的定义、赋值及各种操作函数:http://www.jb51.net/article/41725.htm

与c语言的字符串cstring的区别:

1.cstring是char[]或者char*类型的,而c++的字符串是string类型的。

2.像strcpy、strlen等一些操作cstring的函数的参数类型一般都是char*或者const char*,它们是不能操作c++的string类型字符串的。

3.同样size()、length()等一些string类的成员函数也只有string类才能用,cstring不能用。

4.cstring的标识符有双重身分:字符数组和指向字符串的指针。所以*cstring、&cstring都可以,分别是取指针cstring(指向首元素)的内容和取字符数组cstring的首地址。而c++的string没有双重身分,它就是字符串类型变量,所以&string取字符串首地址是可以的,但*string不可以,因为它不是指针。

转换:C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加'\0'。c_str()返回一个以‘\0'结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或 字符数组内。C++字符串并不以'\0'结尾。

建议:是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。

以下为例:

#include<iostream>  
#include<stdlib.h>  
#include<string>  
using namespace std;  
      
int main()  
{  
    string name("xxx"); //定义和赋初值的方法很多,也可以不赋初值 
    cout << "please input your name:";  
    getline(cin,name);  //用getline(istream&,string&),会录入回车符或文本结尾以前的所有字符(包括空格),若不输入name直接敲回车,则赋给name一个空字符。  
    //cin >> name;//则以空格或回车为结尾,无法录入空格字符  
    if(name.empty()){     //name == ""与name.empty()等价  
        cout << "your name is empty!" << endl;  
        system("pause");  
        return 0;  
    }
    name = "axb";//可以等号直接赋值。
    //strcpy(name,"zxb");//报错,string类型字符串不可用
    for(int i = 0;i < name.length()+1;i++){  
        cout << name[i] << ",";  
    }  //用[]索引时,索引最大值为length,name[name.length()]是'\0',输出显示'a'。若超过,则执行时会出错
    cout << endl;
    for(int i = 0;i < name.length();i++){  
        cout << name.at(i) << ",";  
    }  //用at()索引时,索引最大值为length-1,即不能访问结尾符'\0'。若超过,则执行出错。
    cout << endl;
    cout << "welcome" + name << endl;  //字符串类型变量可以直接和字符串常量或变量作加减合并 
    cout << name + name << endl;
    //cout << "aaa" + "ss" << endl; //报错,两个字符串常量不能直接加
    cout << &name << endl;//输出首元素地址  
    //cout << *name << endl;//报错,这是string类型字符串和cstring的重要区别,cstring的标识符有双重身分,可以当指针一样取内容;但string不可以当作指针,用*取其内容  
    for(int i = 0;i < 3;i++){  
        cout << &(name[i]) << endl;  
    }//输出"axb""xb""b"  
    cout << *(&name) << endl;//输出axb 
    cout << sizeof(name) << endl;//输出系统给一个string类型变量分配的固定大小空间为28,不会因为存的字符串改变而改变 
    //cout << strlen(name) << endl;//报错,strlen等cstring的参数是char*或const char*类型,string类型不可用
    cout << "the length of your name is:" << name.size() <<endl;//也可以用name.length() 输出3
	
    system("pause");  
    return 0;  
} 

结果如下:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值