c++学习笔记(五)——字符串

    xiaoxiao2021-12-14  15

    字符串

    1.C语言字符串

    1.1表示形式

    1.1.1字符

    字符用单引号包含,实际上代表一个整数,整数值就是这个字符的ASCII值大小,如‘a’跟97(十进制)的含义是严格一致的,甚至可以互换。

    char ch=’a’;

    printf(“%c”,a);

    1.1.2字符串

    头文件#include <string.h>

    双引号括起来的字符,实际代表一个指向无名数组起始字符的指针,这个无名数组被双引号之间的字符串和一个字符‘\0’初始化,而且这个数组内部数据是只读的,无法修改

    表示方法有:

    // 字符数组形式,由字符串”abcd”和’\0’组成,可以修改值,即可以执行a[2]=’s’;越界不会报错,即可访问a[1000].

    char str[]=”abcd”;

    printf(“%s”,str);   //输出字符串

    printf(“%c”;str[1000]);   //输出字符

    printf(“%c”;*(str+1000));   //输出字符

    // 字符数组形式,由字符串”abcd”和’\0’组成,不可修改值,越界不会报错,即可访问a[1000].

    char *str=”abcd”;

    printf(“%s”,str);   //输出字符串

    printf(“%c”;str[1000]);   //输出字符

    printf(“%c”;*(str+1000));   //输出字符

    // 字符串常量,可以这样使用

    printf(“%s”,”abcd”);   //输出字符串

    printf(“%c”;*[“abcd”+1]);   //输出字符

    // 通过宏定义定义字符串,相当于str=”abcd”;

    #define str “abcd”

    printf(“%s”,str);   //输出字符串,这能这样做

    1.1.3关于字符串结尾的’\0’

    在C语言中,字符串就是一串以NUL字节结尾的字符序列。NUL虽是字符串的终结符,但它本身并不是字符串的一部分。NUL是ASCII字符集中 ‘\0’ 字符的名字,是1个字节域的全0;NULL是一个数值为0的指针,通常是占用4个字节域的全0。虽然它们都是0,甚至某些场合可以互换使用(不考虑数据宽度),但实际工程中还是要使用适当的常量,因为它可以传递给读者更多信息。

    1.2字符串操作函数大全

    参见http://www.jb51.net/article/37410.htm

     

    2.C++字符串

    2.1字符

    和C语言char一样。

    2.2字符串

    头文件#include <string>

    c++中的字符串string是一个类,具体使用方法参见

    http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html

    http://blog.csdn.net/tzheng2008/article/details/7342562

    2.2.1字符串分割
    a).使用strtok函数分割(C函数)

             stringstr = "1 1 2 3 4;4 5 8 6 4;54 5 4";

             char *str1 = (char*)str.c_str();//转化为C风格的字符串

             char *temp;

             cout << strtok(str1,";") << endl;  

    while (temp=(strtok(NULL, ";"))){

                      cout << temp <<endl;

             }

    //该函数在处理一个字符串时第一次调用第一个参数是string,但第二次调用第一个参数必须为NULL,否则它只会从字符串的开始进行分割,不会接着上面一次分割完的子串进行分割,因此用循环的话第一次调用要区分开。

            

    b).使用STL库的函数进行分割

    std::vector<std::string> split(std::string str,std::string pattern){

      std::string::size_type pos;

      std::vector<std::string> result;

      str+=pattern;//扩展字符串以方便操作

      int size=str.size();

      for(int i=0; i<size; i++){

        pos=str.find(pattern,i);

        if(pos<size){

          std::string s=str.substr(i,pos-i);

          result.push_back(s);

          i=pos+pattern.size()-1;

        }

      }

      return result;

    }

    c).使用boost库函数进行分割

    转载请注明原文地址: https://ju.6miu.com/read-969026.html

    最新回复(0)