C风格字符串与string类型(整理)


在C++中,字符串的表示方式有两种:1、从C语言继承过来的C风格字符串;2、C++特有的string类型。在C++程序中,应尽量使用string类型,因为C风格字符串常常带来许多错误,是导致大量安全问题的根源。

字符串字面值:例如 "hello"、“123abc”等,它是以空字符‘\0’结束

C风格字符串:即以空字符‘\0’结束的字符数组,例如char a[ ] ="hello"; 等价于 char a[ ] = {'h', 'e', 'l', 'l', 'o', '\0'};

1C风格字符串的使用

因为C风格字符串本质上是一个字符数组,因此可以采用类似于数组的操作(如下标操作)来操纵。其次,C++语言通过(const)char*类型的指针来操纵C风格字符串,一般使用指针的算术操作符来遍历C风格字符串。例如:

在此之前,先弄明白:

char a[ ] ="hello";   //C风格字符串

char *b = a;//定义了一个char型指针b,它指向字符数组a的第一个元素

char *c ="hello";//定义了一个char型指针c,它指向字符串字面值“hello”的第一个元素

再看(const)char*类型的指针来操纵C风格字符串:

        constchar * cp = "some value";

        while(*cp){

        //do sth

        ++cp;

}

2C风格字符串的标准库函数

头文件:#include<cstring>

strlen(s)

......(函数功能,此处省略) 

strcmp(s1, s2)

 

strcat(s1, s2)

 

strcpy(s1, s2)

 

strncat(s1, s2, n)

 

strncpy(s1, s2, n)

 

3C风格字符串与数字的转换 atoi itoa函数

       头文件:#include<cstblib>

例如:atoi(“1234”)  返回结果1234;原型:int atoi(const char *nptr);

    

       int value = 1234;

       char str[20];

       itoa(value, str, 10);        //返回结果”1234”

      char *itoa( int value, char*str, int radix);[1] 

原型说明:

value:欲转换的数据。

Str:目标字符串的地址。

radix:转换后的进制数,可以是10进制、16进制等。

 

标准string类:在库<string>中定义,其定义包含在std命名空间内

头文件:#include<string>

1、  string类进行字符串处理

采取与访问数组一样的方式来访问string对象中的字符

2、 string标准类的成员函数

构造函数

 ......(函数功能,此处省略) 

string str


strint str(“sample”)

 

string str(a_string)

 

元素访问

 

str[i]

 

str.at(i)

 

str.substr(position,length)

 

赋值、修改

 

str1 = str2;

 

str1+= str2;

 

str.empty()

 

str1 + str2

 

str.insert(pos, str2);

 

str.remove(post, length);

 

比较

 

==  !=  <  >  <=  >=

 

查找

 

str.find(str1)

 

str.find(str1,pos)

 

str.find_first_of(str1,pos)

 

str.find_first_not_of(str1,pos)

 

长度

 

str.length()

 

 

String对象与C风格字符串之间的转换:

1、 string 转C

char a_cstring[] = “hello”;

string b_string;

b_string =a_string; //正确,但反过来错误

2、 C转string

Strcpy(a_cstring,b_string.c_str());  //其中c_str()为string的成员函数,返回与string调用对象对应的一个C字符串

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值