C字符串与C++中string的区别详解

在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作。以下是C字符串和C++中string的区别:

 C字符串
 string对象(C++)

所需的头文件名称
 <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)

相关推荐

  • VC++ 字符串String MD5计算小工具 VS2008工程

    基于字符串加密的MD5算法,VS2008 VC++,多字节编译工程.主要代码如下,实现了ANSI字符串加密与Unicode字符串加密. 运行效果如下: 核心代码: void CEncryptByMd5Dlg::OnButtonOk() { // TODO: Add your control notification handler code here UpdateData(true); unsigned int len=0; char *cTemp =NULL; if(m_bType==0) {

  • 详解NSString 与C++ string字符串的互转

    NSString 与C++ string字符串的互转实例详解 1.  string 转换为 NSString std::string str("hello"); NSString *str=[NSString stringWithString:str.c_str()]; NSString *istr=[NSString stringWithString:@"zsh"]; str=[istr cStringUsingEncoding: NSUTF8StringEnco

  • 详解C++的String类的字符串分割实现

    详解C++的String类的字符串分割实现 功能需求,输入一个字符串"1-2-3"切割出"1"."2"."3".在Java下直接用String的split函数就可以了.c++下String没有直接提供这个函数,需要自己写. 网上给出的解决方案是这里的三种方法.但我是通过JNI访问的,在里面用这些vector可能不中,自己封装了个,仅供参考: String recogScop = "01-02-03"; co

  • C++ 中String 替换指定字符串的实例详解

    C++ 中String 替换指定字符串的实例详解 C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所有字符串,将"12212"这个字符串的所有"12"都替换成"21",结果是什么? 可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现, 代码如

  • C++ string 字符串查找匹配实例代码

    在写C++程序中,总会遇到要从一个字符串中查找一小段子字符串的情况,对于在C中,我们经常用到strstr()或者strchr()这两种方法.而对于C++的string,我们往往会用到find(). C++:#inlcude<string> C: #include<string.h> find():在一个字符串中查找一个指定的单个字符或字符数组.如果找到,就返回首次匹配的开始位置:如果没有查找到匹配的内容,就返回string::npos. find_first_of():在一个目标串

  • C字符串与C++中string的区别详解

    在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作.以下是C字符串和C++中string的区别:  C字符串 string对象(C++) 所需的头文件名称  <string>或<string.h> <string>或<string.h> 需要头文件 原因 为了使用字符串函数 为了使用string类 声明 方式 char name[20]; string name; 初始化方式 char name[20]="

  • python字符串的index和find的区别详解

    1.find函数 find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置.如果不包含索引值,返回-1. string='abcde' x=string.find('a') y=string.find('bc') z=string.find('f') print(x) print(y) print(z) #运行结果 0 1 -1 2.index函数

  • JAVA中string数据类型转换详解

    在JAVA中string是final类,提供字符串不可以修改,string类型在项目中经常使用,下面给大家介绍比较常用的string数据类型转换: String数据类型转换成long.int.double.float.boolean.char等七种数据类型 复制代码 代码如下: * 数据类型转换 * @author Administrator * */ public class 数据类型转换 { public static void main(String[] args) { String c=

  • 基于js 字符串indexof与search方法的区别(详解)

    1.indexof方法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法: 注意:有可选的参数(即设置开始的检索位置). 2.search方法 search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串. 注意:search方法可以根据正则表达式查找指定字符串(可以忽略大小写,并且不执行全局检索),同时没有可选参数(即设置开始的检索位置). 以上这篇基于js 字符串indexof与search方法的区别(详解)就是小编分享给大家的全部

  • c语言获取用户输入字符串是scanf和gets的区别详解

    解释 gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止. 1.scanf() 所在头文件:stdio.h 语法:scanf("格式控制字符串",变量地址列表); 接受字符串时:scanf("%s",

  • Servlet中/和/*的区别详解

    目录 本文提纲 版本约定 ✍正文 点拨"市面上"的错误答案 1./用于Servlet,/*用于Filter 2./不会匹配.jsp请求,而/*可以匹配到.jsp请求 3./*匹配范围比/大 4./匹配所有url(路径+后缀),/*只匹配路径型 Servlet四种匹配方式 1. 精确匹配 2. 路径匹配 3. 后缀名匹配 4. 缺省匹配 URL匹配注意事项 匹配顺序 /和/*的区别 DispatcherServlet不拦截.jsp请求根因分析 ✍总结 本文提纲 版本约定 JDK:8 Se

  • C语言中const和C++中的const 区别详解

    C语言中const和C++中的const 区别详解 C++的const和C语言的#define都可以用来定义常量,二者是有区别的,const是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查. 而C语言中的const与C++也有很大的不同,在C语言中用const修饰的变量仍是一个变量,表示这个变量是只读的,不可显示地更改,而在C++中用const修饰过后,就变成常量了.例如下面的代码: const int n=10; int a[n];

  • C# 中string.split用法详解

    第一种方法 string s=abcdeabcdeabcde; string[] sArray=s.Split('c') ; foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 第二种方法 我们看到了结果是以一个指定的字符进行的分割.使用另一种构造方法对多个字 符进行分割: string s="abcdeabcdeabcde"; string[] sArray1=s.

  • 从go语言中找&和*区别详解

    *和&的区别 :& 是取地址符号 , 即取得某个变量的地址 , 如 ; &a*是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从代码中验证 : 先构建一个Rect类型 : 1. &是取地址符号, 取到Rect类型对象的地址 2. *可以表示一个变量是指针类型(r是一个指针变量): 3.*也可以表示指针类型变量所指向的存储单元 ,也就是这个地址所指向的值 4.查看这个指针变量的地址 , 基本数据类型直

  • C语言中 & 和 &&的区别详解

    这是c语言的基本语法,但是在学习的过程中也总是搞混.所以记录一下,也和大家分享一下. &:按照位与操作,例如:0010&1101,结果为0000 &是java中的位逻辑运算:       eg: 2&3=2: 分析如下: 2的二进制为10 :3的二进制为11 : 逻辑&之后为10 &&:短路与,表示如果两个条件都成立则执行之后的逻辑: 例如:if(a==0&&b==0),意思就是if a为0并且b为0的时候,进行下一步操作. || 短

随机推荐