zoukankan      html  css  js  c++  java
  • 第33课 C++中的字符串

    1. 历史遗留问题及解决方案

    (1)历史遗留问题

      ①C语言不支持真正意义上的字符串

      ②C语言字符数组一组函数实现字符串操作

      ③C语言不支持自定义类型,因此无法获得字符串类型

    (2)解决方案

      ①C到C++的进化过程引入了自定义类型

      ②在C++中可以通过类完成字符串类型的定义

    2. 标准库中的字符串类

    (1)C++直接支持C语言的所有概念

    (2)C++语言中没有原来的字符串类型

    (3)C++标准库提供了string类型支持字符串的连接、大小比较、子串查找和提取、字符串的插入和替换等操作

    【编程实验】字符串类的使用   33-1.cpp

    #include <iostream>
    #include <string>
     
    using namespace std;
     
    //选择排序
    void string_sort(string a[], int len)
    {
        for(int i=0; i<len; i++)
        {
            for(int j = i; j < len; j++)
            {
                if(a[i] > a[j])
                  swap(a[i], a[j]);
            }
        }
    }
     
    string string_add(string a[], int len)
    {
        string ret = "";
        
        for(int i =0; i< len; i++)
        {
            ret +=a[i] + "; ";
        }
        
        return ret;
    }
     
    int main()
    {
        string sa[7] =
        {
            "Hello World",
            "Horizon",
            "C#",
            "Java",
            "C++",
            "Python",
            "TypeScript"
        };
        
        string_sort(sa, 7);
        
        for(int i=0; i<7; i++)
        {
            cout << sa[i] << endl;
        }
        
        cout << endl;
        
        cout <<string_add(sa, 7) <<endl;
     
        return 0;
    }

    运行结果:

      

     

    3. 标准库中的字符串类

    (1)字符串流类:(<sstream>头文件)

    • 标准库中提供了相关的类字符串和数字进行转换

    • 字符串流类(sstream)用于string的转换

      • istringstream字符串输入流

      • ostringstream字符串输出流

    (2)字符串数字转换

      string→数字        

    数字→string

    istringstream iss("123.45");

    double num;

    iss>>num;

    ostringstream oss;

    oss<<543.21;

    string s = oss.str();

    【编程实验】字符串和数字的转换   32-2.cpp

    #include <iostream>
    #include <sstream>
    #include <string>
     
    using namespace std;
     
    //TO_NUMBER定义为宏主要目的是为了能将任意类型(如double,int)
    //的数字型字符串转为数字
    #define TO_NUMBER(s, n) (istringstream(s)>>n)
    #define TO_STRING(n)    (((ostringstream&)(ostringstream()<<n)).str())
     
    int main()
    {
        double n = 0; //也可以是int
        
        if(TO_NUMBER("234.567", n))
        {
            cout << n << endl;
        }
        
        string s = TO_STRING(12345);
        cout << s << endl;
     
        return 0;
    }

    运行结果:

      

    (3)string类的相关操作

      ①注意事项:

        A. #include <string>。注意,不是<string.h>。

        B. 分为string和wstring版。分别对应char和wchar_t

        C. using std::string;或using std::wstring;

      ②string类的相关操作(点这里的链接

    【编程实验】用C++完成字符串的循环移位  33-3.cpp

    #include <iostream>
    #include <string>
     
    using namespace std;
     
    string operator >> (const string& s, unsigned int n)
    {
        string ret = "";
        unsigned int pos = 0;
        
        n = n % s.length();
        pos = s.length() - n;
        ret = s.substr(pos); //pos后面的字符串放入ret
        ret += s.substr(0,pos);//在新的ret后面放入s的前pos个字符
        
        return ret;
    }
     
    int main()
    {
        string s = "abcedfg";
        string r = (s >> 3);
        
        cout << r << endl;
     
        return 0;
    }

    运行结果:

      

    4. 小结

    (1)应用开发大多数的情况都在进行字符串处理

    (2)C++没有直接支持原生的字符串类型

    (3)标准库中通过string支持字符串的概念

    (4)string类支持字符串和数字相互转换

    (5)string类应用使得问题的求解变得简单

  • 相关阅读:
    P3158 [CQOI2011]放棋子
    Codeforces 1220D. Alex and Julian
    Codeforces 1220C. Substring Game in the Lesson
    Codeforces 1220B. Multiplication Table
    BZOJ 3260. 跳
    BZOJ 3251. 树上三角形
    P1398 [NOI2013]书法家
    P1224 [NOI2013]向量内积
    The Preliminary Contest for ICPC Asia Shanghai 2019 A. Lightning Routing I
    P4271 [USACO18FEB]New Barns
  • 原文地址:https://www.cnblogs.com/hoiday/p/10163605.html
Copyright © 2011-2022 走看看