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

字符串

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库函数进行分割

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值