// 字符数组与字符串

//导入

#include <string.h>

#include <iostream>

using namespace std;

int main(){

//   1 声明与初始化

注意区分:'\0' 这个字符,转为 int,就是 0,ASCII 码值是 0;'0' 这个字符,char,转为 int,是 48, ASCII 码值是 48。

//2  C++将字符串作为字符数组来处理。字符串常量:“CHINA”,被处理成一个字符类型的一维数组:

// C/C++ 中,字符串本质是一个字符数组,那么既然是数组,我怎么知道长度啊?于是约定,对于字符串,它的字符数组中,‘\0’ 代表字符串的结束标志,它占内存空间,但不计入字符串的长度。有了结束标志‘\0’后,我们只依据它判断字符串是否结束、计算长度!请仔细看下图:

char c[] ="dasdeas",f[] = {"wcao!"}; // c 是一个长度为 8 的字符数组,f 是长度为 6 的字符数组。但是如果问字符串的长度,那就不算 '\0'。但是在内存中,必须存 '\0'。注意:可以加大括号,可以不加。

char d[][8] = {"dd啊aw","dsrd1wa"}; // 因为字符串最后都是 '\0',所以声明 8,如果想存字符串,只能存最长7。如果真存了一个很长的字符串,那就覆盖了别的区域的内存导致程序错误呗。

char c[10] = "CHINA"; //内存里是这样的!!!

// 可以自己写  ‘\0’ ,效果一样:

char g[] ="Test\0";

char h[] = {'a','b','c','\0'};

char str2[12]="The String";

// 或者用 cin

cin>>str2; // 和 java 输入一样,遇到空格之后是下一个变量的内容了,所以想输入整行的话,改为

cin.getline(str2, 11); // 让键盘收11个!!!

以上详细的介绍了字符数组与字符串,这里再提一下 char *

对于:

char str3[] = "321";

这么简单的一句,到底本质是什么呢?(下面的解释看看即可,不要求理解)

字符串 “321” 在编译后,是编排在代码段中的,地址设为 A。是只读的。现在我在栈上获取4字节内存,起始地址在B,然后把A地址上的字符串复制到B处,B在栈中,我是可以修改B的内容的,B 就是 str3。

我们前面的文章灌输了一种数组名就是地址、指针的观点,考虑:

const char * str3 = "321";

和上面的有什么不同呢?字符串是 A,那么 str3 就是 A!如果我现在尝试修改 str3[0] = 0; 肯定是内存访问异常,段错误。

总是超前说指针的内容,也没办法,必须灌输这个概念,不理解的话,慢慢理解,都是这么过来的。

const char * str4 = "321";    // str3 和 str4 地址相同,常量字符串只会编译为1份。

char str5[] = "321"; // str5 和谁的地址都不一样,他是申请栈内存然后把字符串复制过去的

指针有关后面的文章再说。

也可以先去看看后面指针的文章再回顾本文。

// java 里 String 类的方法多,C++ 也有不少,但是使用方法你可能感到很奇怪。所有字符串处理函数,参都都是,字符数组名,即指针,char* 或 const char *

//    3.1 拼接到第一个参数上:单词 concatenate

char str1[20] = {"123+"};

char str3[5] = {"321"};

strcat(str1, str2);  //无返回值

//    注意:

(下面演示的是static char,不用管 重点看函数的使用)

下面这些函数吧,必须练10来遍用起来才能顺手。。。

//    3.2  复制

strcpy(str1, str3);

//    记住:被修改的是第一个参数

strncpy(str1,"eqwedwrdws",5);//限制copy几位。

//    3.3  比较 返回值:第一个出现不同字符的ASCII码差值左减右 .完全相同为0

int distance =strcmp(str1, str2);

cout<<distance<<endl;

//    3.3.2   限制比较时最多后延几位

distance = strncmp(str1, str2,5);//刚才的复制还有别的方法也都有相似的方法,不写了

//    3.4   字符串长度。。。。注意是按照字符串的规则算长度

cout<<strlen(str1)<<endl;

//    注意。长度不包括 '\0',遇到这个字符就计算完成:

char strr[20] ="wocao\0 easf\0s";

cout<<strlen(strr)<<endl;//输出5

//  3.5 转换大小写字母(java: toLowerCase(),toUpperCase())草太多了好烦 学java的自己猜吧不写了

// 4   下面,java 最熟悉的 string 类来了,对字符数组的封装而已。

string a32 ="dssrws";

string a342;

a342 = a32;

// 比较可以直接用 > < ==,按字母排序

// 可以通过下标修改字符串内容

//1.

a342[5] ='w';

//2.

a32 = strr;

cout<<a32<<endl;

//3.

a32 = "123456789\00";

cout<<a32<<endl;//也是遇 \0 停

注意:C++ 的 string 操作有限,功能大多是通过 str 族的函数实现的,这要求使用者对这个库的函数非常熟练使用。
}

java基础改学C++(五)数组(2)字符串相关推荐

  1. java基础实现水果超市系统(数组+集合+对象持久化(io流存储到txt文件))

    java基础实现水果超市系统(数组+集合+对象持久化(io流存储到txt文件)) Fruit类 package com.zr.fruitSupermarket;/*** 水果* @author ZR* ...

  2. c++ new 数组_用Java实现JVM第八章《数组和字符串》

    案例介绍 本章主要介绍如何实现让虚拟机处理数组和字符串,在虚拟机功能增强后,我们可以执行数组类型计算和输出字符串.本章需要新增实现数组指令:newarray.anewarray.arraylength ...

  3. Java基础教程【第五章:Java数组】

    章节目录 1. 数组的创建和声明 1.1定义 1.2特征 1.3数组的声明 1.4创建数组空间 2. 数组的初始化和元素 2.1数组元素 2.2数组初始化 3. 一维数组 4. 二维数组 4.1静态初 ...

  4. [JAVA基础] 简单又不简单的数组

    引言 相信有过编程基础的小伙伴都知道数组这个数据结构,它应该也是我们第一个接触的数据结构,学过C或者C++的应该知道数组和指针紧密相关,那么在java里没有了指针,java里的数组又有哪些不同的特点呢 ...

  5. [ 转载 ] Java基础12--基础学习总结——数组

    java基础学习总结--数组 一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的 ...

  6. 【Java基础】前端传一个数组或者集合后台怎么接受(案例详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  7. java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》

    小傅哥 | https://bugstack.cn 沉淀.分享.成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获.目前已完成的专题有:Netty4.x实战专题案例.用J ...

  8. Java基础学习系列--(五)【迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类】

    第一章 Iterator迭代器 1.1 Iterator接口 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator. 想要遍历Coll ...

  9. Java基础知识梳理(五)从源码了解字符串

    这篇文章来自我的博客 之前写过一篇关于 String 类.StringBuilder 和 StringBuffer 的基本介绍,今天从 String 类的部分源码来看 String 类(本文基于 JD ...

最新文章

  1. 使用dstat命令的插件查看mysql的io状态
  2. python中dir用法_Python内置函数dir详解
  3. UVa --10566
  4. 再高深的 Python 面试难题,这门课都给你整得明明白白!
  5. springcloud-05-ribbon中不使用eureka
  6. 常用技巧 —— 位运算 —— 异或运算实现两个数的交换
  7. mysql dwith ssl_mysql replication支持ssl(一主一从)
  8. hadoop大数据概述
  9. 华为路由器配置OSPF实现不同网段通信
  10. 【场外衍生品系列】雪球结构定价研究
  11. 计算机基础与应用演示文稿教案,计算机应用基础讲解教案powerpoint演示文稿.ppt...
  12. 从控制台输入一个三位数,如果是水仙花数(是指一个三位数,其各位数字立方和等于该数 )就打印“是水仙花数”,否则打印“不是水仙花数”
  13. python-igraph基本用法(一)
  14. Chess.com:象棋社区网站每月访问量达 2.8 亿,年收入在 5000 万至 1 亿之间
  15. vue-cli搭建项目,使用localhost或ip地址均可访问
  16. 计算机网络(五):IPv6
  17. C语言——大小写字母转换
  18. mdio clause22 clause45以及marvell直接寻址/间接寻址的使用说明--基于mv88e6390 交换机
  19. python爬虫beautifulsoup爬当当网_利用python爬虫可视化分析当当网的图书数据!
  20. 浅谈 Nyquist–Shannon(奈奎斯特-香农)采样定理

热门文章

  1. HTML字体以及图标字体iconfont、Font Awesome的使用
  2. 论文 | Movie Editing and Cognitive Event Segmentation in Virtual Reality Video
  3. python实现数据去重_Python实现的txt文件去重功能示例
  4. 四川初中计算机老师工资多少,揭秘四川中小学教师工资待遇,你觉得高吗?
  5. 【开源技术分享】无需流媒体服务,让浏览器直接播放rtsp/rtmp的神器:EasyMedia
  6. 日期和时间函数DateAdd
  7. 0元0基础搭建个人网站简易实操
  8. 机器学习Chapter-1(线性模型)
  9. 令人肝肠寸断的100个签名首语
  10. 山东中职计算机专业考本科,山东省教育厅下通知:中职生今后不能再考本科