C++ 学习笔记(三)string 类
在C语言中如果想要使用字符串那么有两种方法:
1.定义char型数组:char[10]; 然后将每个字符填充到对应的位置。
优点:这种方式将字符串放在内存所以每个位置都可以修改。
缺点:赋值比较麻烦,需要预先定义好长度。
2.定义char 型指针:char *str = "string test ";
优点:赋值方便,不需要定义长度。
缺点:字符串是一个常量,想要改变其中某个字符是不存在的。
以上两种方式都可以以数组的方式访问字符串中的某一个字符。然而字符串长度不定,内容也不确定的情况在开发中还是很经常遇到的,举个栗子就是文件的命名(用户二次开发的要求五花八门);使用C语言只能开一个比较大的char型数组来解决这个问题但是内心是极其不爽的。
C++ string类的牛逼之处:
1.c++兼容c语言下的字符串的玩耍方式。
2.string是一个类,那么它有自己的“方法”(函数),就是说它自带了求字符串长度、字符串转整型、查找字符等各种功能。
3.字符串合并直接相加即可,想要在字符串后面加上什么直接 str += "abc"就搞定啦。
4.不需要定义字符串长度可随意改变字符串内容。(这点很皮)
5.想要将其他字符串拷贝过去直接用'='就搞定:str = str1;这样就将str1的内容拷贝给str了。
下面将用程序演示string类的好玩之处:
#include <iostream>
#include <string>
using namespace std; void func(int num)
{
char arry[num];
int i;
for(i=;i<num;i++)
arry[i] = 'a';
arry[num-] = '\0';
cout<<arry<<endl;
} int main(int argc, char **argv)
{
string str1 = "abc";
string str2 = "def";
string str3;
cout<<"str1:"<<str1<<endl; cout<<str1+str2<<endl; str1[] = 'a';
cout<<"str1:"<<str1<<endl; cout<<"entry str3"<<endl;
cin>>str3;
cout<<"str3 :"<<str3<<"\nstrlen of str3 :"<<str3.size()<<endl; int num = ;
cout<<"entry arry num"<<endl;
cin>>num;
func(num);
system("pause");
return ;
}

1.代码66 行 将str1 与 str2直接相加可直接将其链接起来,类似C语言使用的strcat函数。当然也可以将两者相加的结果赋值给另一个string类
2.代码68行 直接修改str1中的某一个字符
3.代码72行 随机输入一个内容,长度不定的字符串string类可以很好的保存起来
4.代码73行 调用srting类size函数可计算出字符串长度
5.函数func()内可以定义一个数组,长度可以是一个变量这个在C语言中想想就好。数组字符串需要预留结束符 ’\0‘的位置那么
arry[2] == '\0'; 所以只输出了两个字符’a‘。
感受:
俗话说编程语言没有优劣之分,各有千秋。但是C++ 的srting 类以及数组长度可用变量进行定义这两点用起来确实是比C语言方便很多。
C++ 学习笔记(三)string 类的更多相关文章
- Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式
一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...
- java学习笔记之String类
String类总结 String类概述: java.lang.String 类是字符串操作类 String类的常用构造方法: //1.直接赋值 String str= "hellojava& ...
- MyBatis学习笔记(三) Configuration类
一.初探Configuration类 我们先来看一下MyBatis的XML配置文件的结构,(摘自mybatis.org) 下面这个是Configuration类的部分变量 一点不一样是不是??? 其实 ...
- (转)Qt Model/View 学习笔记 (三)——Model类
Model类 基本概念 在model/view构架中,model为view和delegates使用数据提供了标准接口.在Qt中,标准接口QAbstractItemModel类中被定义.不管数据在底层以 ...
- JVM学习笔记(三):类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 实现语言无关性的基础是虚拟机和字节码存储格式.Java虚拟机不和包括Java在内的任何语言绑定,只与&quo ...
- java学习笔记5——String类常用方法
1.字符串长度计算: int i = String1.length(); 2.字符串比较:1) equals()和equalsIgnoreCase //比较两个字符串对象的实体是否相同,相同输出tru ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- form常用表单标签
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PAT甲级——1110 Complete Binary Tree (完全二叉树)
此文章同步发布在CSDN上:https://blog.csdn.net/weixin_44385565/article/details/90317830 1110 Complete Binary ...
- Cent OS 6.5 下 Node.js安装
打开官网 http://nodejs.org/ 点击那个绿色的INSTALL 按钮下载安装包,然后解压. 基本的环境我原本已经安装完毕,这是需求的环境,来源安装包中的README.md,需要的自行 ...
- 070 Climbing Stairs
你正在爬楼梯.需要 n 步你才能到达顶部.每次你可以爬 1 或 2 个台阶.你有多少种不同的方式可以爬到楼顶呢?注意:给定 n 将是一个正整数.示例 1:输入: 2输出: 2说明: 有两种方法可以爬到 ...
- 修改datatable列
var dt = dh.GetPageTable("tabelename"); dt.Columns["TBLNO"].ColumnName = "业 ...
- springboot+shiro+cas实现单点登录之shiro端搭建
github:https://github.com/peterowang/shiro-cas 本文如有配置问题,请查看之前的springboot集成shiro的文章 1.配置ehcache缓存,在re ...
- Date 对象 时间格式注意事项
Date 对象,是操作日期和时间的对象. Date 为内置的构造函数, 通过 new Date () 来获取当前本地日期与时间 const time = new Date console.log(ti ...
- 多线程串口通信 MFC CSerialPort
写在前面: 晚上应该继续完成未写完的代码,但Chrome上打开的标签实在太多了,约30个了,必须关掉一些,所以需要把自己看的整理一下然后关掉.本次主要写点MFC环境下多线程串口通信相关的东西,这包括线 ...
- object flash
<!-- html插入flash --> <object type="application/x-shockwave-flash" width="100 ...
- 初识ProgressBar
Android FormWidget之一 实现起来很简单,大体有两种style. 怎么自定义ProgressBar? 有两种方法,一种是运用android:progressDrawable=" ...