C字符串与C++字符串的深入理解

在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串。C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示字符串的结束。需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组。

C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值。对C字符串的操作需要通过"string"文件中定义的字符串处理函数。例如:
//字符串的初始化
char a[11] = "huanying";
//字符串的赋值
strcpy(a,"nihao")
//获取字符串的长度,不包括'\0'在内
strlen(a);
printf("%s",a);
在C中也可以使用字符指针来访问一个字符串,通过字符指针指向存放字符串数组的首元素地址来进行访问.
char *a = "nihao";
printf("%s",a);
在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作。
以下是C字符串和C++中string的区别:
                            C字符串                                  string对象
所需的头文件名称            <string>或<string.h>            <string>或<string.h>
为什么需要头文件            为了使用字符串函数                  为了使用string类
如何声明                        char name[20];                    string name;
如何初始化                     char name[20]="nihao";      string name = "nihao";
必须声明字符串长度么?  是                                         否
使用一个null字符么?      是                                         否
怎样实现字符串赋值        strcpy(name,"John");           name = "John";
其他优点                       更快                                      更易于使用,优选方案
可以赋一个比现有字符更 不能                                      可以
长的字符串么? 
C++常用字符串函数
char s1[]="I am a student";
char s2[20]="teacher";
char s3[]="student";
int result;
char s4[20],*p;
(1)串长度 int strlen(char *str)
cout<<strlen(s1)<<endl; 输出14
cout<<strlen(s2)<<endl; 输出7
(2)串拷贝 char *strcpy(char *str1,char *str2)
strcpy(s4,s2);   //s4为"teacher"
(3)串连接 char *strcat(char *str1,char*str2)
strcat(s2,s3); //s2为"teacherstudent"
(4)串比较 int strcmp(char *str1,char *str) //比较的是对应字符的ASCII码值,如果str1>str2,返回1
result=strcmp(s2,s3);   //result>0
result=strcmp(s2,s2);   //result=0
result=strcmp(s3,s2);   //result<0
(5)串定位 char *strchr(char *str,char ch)
p=strchr(s1,'s');    //找到返回字符在字串中的位置,否则返回-1
strcpy(p,s2);      //s1为"I am a teacher"
(6)在一个串中查找是否存在和另一个串相等的子串
(7)截取子串形成一个新串
字符串的输入
(1)方法一:
使用输入操符来填充一个C字符串变量
例如:
char a[80];
cin>>a;
注:以这种方式来读取C字符串时,会忽略最初的空白字符(空格、制表符和换行符),而且输入会在下一个空格或者换行符处停止。
(2)方法二:使用预定义函数getline获取整行输入(包括空格)
getline函数有两个参数:第一个参数用于接收输入的C字符串变量;第二个参数用于规定getline最多能接收的字符个数。
例如:
char a[80];
cin.getline(a,80);
当遇到行结束的时候,输入才会停止。
C++ string类的输入
(1)方法一:
和C字符串输入的方法一相同。
(2)方法二:使用getline函数。
例如:
string a;
getline(cin,a);
string对象和C字符串之间的转换
可以将C字符串存储在string类型的变量中,例如:
char a[] = "nihao";
string b;
b=a;
但string对象不能自动的转换为C字符串,需要进行显式的类型转换,需要用到string类的成员函数c_str().
例如:
strcpy(a,b.c_str());
字符串到数字的转换
atoi函数获取一个C字符串参数,返回对应的int值。如果参数不与一个int值对应,atoi就会返回0。atoi函数在文件为cstdlib的库中。如果数字太大,不能转换成int类型的值,可以使用atol将字符串转换为long类型的值。
例如:
atoi("1234");   //返回整数1234
atoi("#123");   //返回0

(0)

相关推荐

  • C++ 字符串的反转五种方法实例

    复制代码 代码如下: //通过不同的方法,实现对所输入字符串的反转,可以很好地复习巩固 C++ 基础知识/*分析过程: 假设要使传递的字符串为常量const字符串,这样操作更加灵活,可直接传递字符串字面值进行反转,常见的解决方法就是,定义一个新的与传递过来字符串长度 相等的字符数组,然后进行字符串拷贝,把str字符按从左到右放置到字符数组中,然后采用循环来对字符数组中字符反转*//*第一种,采用以上思路解法,传递为const类型C风格字符指针,返回为char*类型*///直接使用字符数组赋值ch

  • C++ 将数据转为字符串的几种方法

    收集一下: 1\将int 转为 LPCTSTR 其实LPCTSTR可以直接使用CString直接代替,无需类型强制转换 CString str; int number=15; //str="15" str.Format(_T("%d"),number); //str=" 15"(前面有两个空格:4表示将占用4位,如果数字超过4位将输出所有数字,不会截断) str.Format(_T("%4d"),number); //str=

  • C++实现数字转换为十六进制字符串的方法

    本文实例讲述了C++实现数字转换为十六进制字符串的方法.分享给大家供大家参考.具体如下: function toHex(number, min) { var hexes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; var hex = ''; var min = min || 2; var nibble; do { nibble = number & 0x0f; number

  • C++多字节字符与宽字节字符相互转换

    最近在C++编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,一直自己贴那几句代码.觉得麻烦,于是就自己写了一个类来封装wchar_t与char类型间的转换,其他的,诸如:CString\ LPWSTR\TCHAR CHAR\LPSTR之间也是一样用 复制代码 代码如下: #include <iostream> using namespace std; class CUser { public: CUser(); virtual~ CUser(); char* WcharToChar(w

  • 用标准c++实现string与各种类型之间的转换

    要实现这个目标,非stringstream类莫属. 这个类在头文件中定义, < sstream>库定义了三种类:istringstream.ostringstream和stringstream,分别用来进行流的输入.输出和输入输出操作.另外,每个类都有一个对应的宽字符集版本. 简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作. 示例1示范怎样使用一个stringstream对象进行从 string到int类型的转换 注意,使用string对象来代替字符数组

  • c++中数字与字符串之间的转换方法(推荐)

    1.字符串数字之间的转换 (1)string --> char * string str("OK"); char * p = str.c_str(); (2)char * -->string char *p = "OK"; string str(p); (3)char * -->CString char *p ="OK"; CString m_Str(p); //或者 CString m_Str; m_Str.Format(&q

  • C字符串与C++字符串的深入理解

    在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串.C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示字符串的结束.需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组. C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值.对C字符串的操作需要通过"string"文件中定义的字符串处理函数.例如://字符串的初始化char a[11] = &

  • c字符串,string对象,字符串字面值的区别详解

    一.字符串字面值字符串字面值是一串常量字符,字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符.字符串没有变量名字,自身表示自身 复制代码 代码如下: "Hello World!" //simple string literal"" //empty string literal"\nCC\toptions\tfile.[cC]\n" //string literal us

  • python字符串分割及字符串的一些常规方法

    字符串分割,将一个字符串分裂成多个字符串组成的列表,可以理解为字符串转列表,经常会用到 语法:str.split(sep, [,max]),sep可以指定切割的符号,max可以指定切割的次数(次数不常用) 不带参数时以空格进行分割 带参数时,以该参数进行分割 未查询到分隔符时,列表只包含原始字符串 source ="1,2,3,4,5,,6" print source.split(',') #按照索引取值[] source ="1,2,3,4,5,,6" print

  • 对json字符串与python字符串的不同之处详解

    API的应用通常会处理json数据,刚好今天看到了json字符串和python字符串的区别,放一段代码,区别一下子就看出来,的确json 库为处理Json 数据提供了不少的便利. import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit&quo

  • JS正则截取两个字符串之间及字符串前后内容的方法

    本文实例讲述了JS正则截取两个字符串之间及字符串前后内容的方法.分享给大家供大家参考,具体如下: 1.js截取两个字符串之间的内容: var str = "aaabbbcccdddeeefff"; str = str.match(/aaa(\S*)fff/)[1]; alert(str);//结果bbbcccdddeee 2.js截取某个字符串前面的内容: var str = "aaabbbcccdddeeefff"; tr = str.match(/(\S*)ff

  • Java的字符串中对子字符串的查找方法总结

    Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引. 2.int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引. 3.int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引. 4.int lastIndexOf(String str, int startI

  • oracle插入字符串数据时字符串中有'单引号问题

    使用insert into(field1,field2...) values('val1','val2'...)时,若值中有单引号时会报错. 处理方法:判断一下val1,val2中是否含有单引号,若含单引号,则将单引号'替换成两个单引号''. 将字段与字段值组织到一个HashTable中,再抽象出一个组织sql语句的函数getSqlByHashTable(): HashTable ht =new HashTable(); ht.add(field1,val1); ht.add(field2,va

  • JavaScript检查子字符串是否在字符串中的方法

    本文实例讲述了JavaScript检查子字符串是否在字符串中的方法.分享给大家供大家参考,具体如下: var strnew="Hello Raghu How are u" //Checking existence in entire string if(strnew.indexOf("Raghu") != -1 ) { alert("Exists"); } /* Checking existence at the end of string Fo

  • Python原始字符串与Unicode字符串操作符用法实例分析

    本文实例讲述了Python原始字符串与Unicode字符串操作符用法.分享给大家供大家参考,具体如下: #coding=utf8 ''''' 在原始字符串里,所有的字符串都是直接按照字面的意思来使用, 没有转义特殊或不能打印的字符. 正则表达式是一些告诫搜索匹配方式的字符串, 通过是由代表字符.分组.匹配信息.变量名.字符类等的特殊符号组成. 在原始字符串紧靠第一个引号前,需要加上r或R字母,来表示该字符是原始字符串. 原始字符串和普通字符串有这几乎完全相同的语法. Unicode字符串操作符,

  • 总结C#删除字符串数组中空字符串的几种方法

    前言 随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.但C#3.0新增的lambda表达式就可以很方便实现这个功能,下面一起看看为大家整理的几种清除数组中的空字符串的方法,有需要的可以参考学习. 方式一:使用lambda表达式筛选过滤掉数组中空字符串 /// <summary> /// 使用lambda表达式排除/过滤/清空/删除掉字符串数组中的空字符串 /// </summary> //

随机推荐