• 4-数组、指针与字符串1.6-字符串


    在c语言中是使用字符型数组来存放字符串,c++程序中也仍然可以沿用这种方法;不仅如此,标准c++库中还预定义了string类。

    1、用字符数组存储和处理字符串

    a、字符数组的声明和引用

    eg:

    #include<iostream>

    using namespace std;

    int main()

    {

      static char c[10]={'I',' ','A','M','A','B','O','Y'};

      int i;

      for(i=0;i<10;i++)

        cout<<c[i];

      cout<<endl;

    }

    b、用字符数组存放字符串

    eg:static char str[8]="program";

    static char str[]="program";

    如果用字符数组来存放字符串,即可以逐个字符输入输出,也可以将整个字符串一次输入或输出。例如:

    char c[]="China";

    cout<<c;

    字符串整体输入/输出时,要注意:

    1)输出字符不包括'';

    2)输出字符串时,输出项是字符数组名,输出时遇到''结束;

    3)输入多个字符串时,以空格分隔;输入单个字符串时其中不能有空格。

    eg:

    static char str1[5],str2[5],str3[5];

    cin>>str1>>str2>>str3;

    如果运行时输入如下数据:How are you?

    str1:How

    str2:are

    str3:you?

    static char str[13];

    cin>>str;

    运行时输入数据:

    How are you?

    内存中变量str内容如下:str:How;这是因为输入时遇到空格便停止,所以只接收到了第一个单词。

    对字符串进行处理,可以使用系统的字符串处理函数strcat(连接)、strcpy(复制)、strcmp(比较)、strlen(求长度)、strlwr(转换为小写)、strupr(转换为大写)。其头文件是cstring。

    2、string类

    由于将数据与处理数据的函数分离不符合面向对象方法的要求。为此,c++标准类库将面向对象的串的概念加入到c++语言中,预定义了字符串类(string 类),string类提供了对字符串进行处理所需要的操作。其头文件为string;string类封装了串的属性并提供了一系列允许访问这些属性的服务,属性或类的数据组件包括:

    字符序列、字符序列的大小或长度、序列中字符的类型、字符的特点、一个字符的大小、分配算符、迭代子(iterators)

    串类也描述了很多有关串操作的服务,包括:

    查找、分配、连接、追加

    1)构造函数的原型

    string();//默认构造函数,建立一个长度为0的串

    string(const string &rhs);//拷贝初始化构造函数

    string(const char *s);//用指针s所指向的字符串初始化string类的对象

    string(const string& rhs,unsigned int pos,unsigned int n);//将对象rhs中的串从位置pos开始取n个字符,用来初始化string类的对象

    string(const char *s,unsigned int n);//用指针s所指向的字符串中的前n个字符初始化string类的对象

    string(unsigned int n,char c);//将参数c中的字符重复n次,用来初始化string类的对象。

    2)常用成员函数功能简介

    在下面的函数说明中,将成员函数所属的对象称为“本对象”,其中存放的字符串称为“本字符串”;

    string append(const char *s);//将字符串s添加在本串尾

    string assign(const char *s);//赋值,将s所指向的字符串赋值给本对象

    int compare(const string & str) const;//比较本串与str中串的大小,当本串<str串时,返回负数,当本串>str串时,返回正数,两串相等时,返回0.

    string& insert(unsigned int p0,const char *s);//将s所指向的字符串插入在本串中位置p0之前

    string substr(unsigned int pos,unsigned int n)const;//取子串,取本串中位置pos开始的n个字符,构成新的string类对象作为返回值

    unsigned int find(const basic_string& str)const;//查找并返回str在本串中第一次出现的位置

    unsigned int length() const;//返回串的长度(字符个数)

    void swap(string &str);//将本串与str中的字符串进行交换

    3)string类的操作符

    操作符                                              实例                                                       注释

    +                                                   s+t                                  将串s和t连接成一个新串

    =                                                   s=t                                 用t更新s

    +=                                                s+=t                                等价于s=s+t;

    ==(测试等于)、!=(不等于)、<(字符串小于)、<=(字符串小于等于)、>(字符串大于)、>=(字符串大于等于)、[i](访问串中下标为i的字符)

    举例:

    #include<string>
    #include<iostream>
    using namespace std;
    void trueFalse(int x)
    {
    cout<<(x?"TRUE":"FALSE")<<endl;
    }
    int main()
    {
    string S1="DEF",S2="123";
    char CP1[]="ABC";
    char CP2[]="DEF";
    cout<<"S1 is"<<S1<<endl;
    cout<<"S2 is"<<S2<<endl;
    cout<<"length of S2:"<<S2.length()<<endl;
    cout<<"CP1 is"<<CP1<<endl;
    cout<<"CP2 is"<<CP2<<endl;
    cout<<"S1<=CP1 returned";
    trueFalse(S1<=CP1);
    cout<<"CP2<=S1 returned";
    trueFalse(CP2<=S1);
    S2+=S1;
    cout<<"S2=S2+S1:"<<S2<<endl;
    cout<<"length of S2:"<<S2.length()<<endl;
    getchar();
    }

  • 相关阅读:
    POJ-3131-Cubic Eight-Puzzle(双向BFS+哈希)
    Android WebView与JavaScript交互操作(Demo)
    程序猿Web面试之jQuery
    Java数据类型(基本数据类型和引用数据类型)
    Swift学习——A Swift Tour 枚举和结构体
    大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”
    thinkphp curd的事务回滚 一看就会
    图书源代码下载: Modern Differential Geometry of CURVES and SURFACES with Mathematica
    UOJ#422. 【集训队作业2018】小Z的礼物
    删除所选项(附加搜索部分的jquery)
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6231274.html
Copyright © 2020-2023  润新知