C++中string和char字符串的异同与使用方法

C++中string和char声明字符串的异同和使用

  • string类
    • 必须在头文件中包含<string>
    • 隐藏了字符串的数组性质,可以像处理普通变量那样处理字符串
    • string类位于名称空间std中
    • string是一个类,创建出的是一个对象

操作(赋值,拼接,附加)

  • 不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象
char charr1[20];
char charr2[20] = "jaguar";
charr1 = charr2;//此操作不合法(相当于两个首地址的赋值操作)
string str1;
string str2 = "panther";
str1 = str2;//此操作合法
  • 可以使用连接运算符"+"将两个string对象合并起来,还可以用"+="将字符串附加到string对象的末尾
    • 此处的加号起连接作用,不是做加法的作用
    • "+"在第一次碰到string对象之后起连接作用,之前作数字间的加法
string str3;
str3 = str1 + str2;//str3是 str1的内容后紧跟str2的内容 的合并数组。
//对应char字符串的strcpy(charr3,charr1);strcat(charr3,charr2);
str1 += str2;//str1后紧跟str2的内容
  • 确定两种字符串中字符数的方法
    • char类型字符串可用头文件<cstring>中的strlen(字符串名)函数,该函数返回该字符串包含的字符数,不包含'\0'
    • string创建的对象可以用对象名.size()来确定。
      • string str;,str是一个string对象,size()是string类的一个方法,方法是一个函数

输入输出 I/O

  • string字符串在未被初始化前长度被自动设置为0,而char类型的字符串第一个'\0'出现的位置是不确定的,因此,strlen()获取的长度不确定,甚至可以大于中括号中给定的长度

  • 可以用cin>>来讲输入存储到string对象中

  • 可以使用cout<<来显示string对象

  • 每次读取一行而不是一个单词时使用的句法不同

  • 读入

    • 将一行输入读入数组:cin.getline(字符数组名,数组长度)

      这个getline()为istream类中的一个类方法,使用第二个参数避免超过数组的长度

    • 将一行输入读取到string对象中:getline(cin,string创建的对象名)

      可见,这个getline()没有句点,表明这个getline()不是类方法,它将cin作为参数,指出到哪里去查找输入,另外,也没有指出字符串长度的参数,因为string对象将根据字符串的长度自己调整自己的大小

      istream类中,有处理double,int,和其他基本元素的类方法,但没有处理string对象的类方法

    • cin>>输入一个string对象可行是因为使用string类的一个友元函数

上一篇:Java用KMP算法解决字符串匹配问题


下一篇:kmp算法