其实印象里,c的char用法反倒比c++的string深一点,可能是因为我对string的运用太少了吧。 提到C++的string,就得先提一下首先提一下C的char类型,毕竟C++是根据C延展过来的,继承了C的特性,而且C本身是没有string这个东西的。 char是什么?一个关键字,用于声明一个变量是字符类型。好吧,看起来很简单,实际上有点复杂。比如字符是什么? 已知int,double,float类型都是数,很直观,存储在计算机里是二进制,变成0101的形式,毕竟他们都是数字,那么字符呢?? 无论人类语言所说哪一种语言,对计算机来讲都是无法理解的,计算机只懂0101,其实这样说不太好,因为计算机底层硬件就是无数的集成电路,电路基本的逻辑门只有两种状态,有电流通过的“1”态,没电流通过的“0”态。这就是为为什么计算机只懂二进制了。 所以你告诉它一个数字,我们可以把这个数字变成二进制在计算机里存储;而你告诉它一个字符,比如s,它根本不会知道这是什么??但我们人类很清楚,s就是一个字符。So?你知道没用,计算机知道才有用。所以什么是字符?计算机怎么识别的它的?? 为了知道这个问题的答案,我们就要知道ASCII表这个东西。具体的我也不复制粘贴了,自行百度。这个表就是计算机识别字符的关键。从表可以知道,字符对计算机而言就是一个数,比如我们输入字符 char a=‘s’,查表就会知道s的二进制0111 0011,十进制就是115。好了,现在我们知道原来s在计算机里的存储形式原来是0111 0011,可问题又来了。我怎么知道这个数提取出来后,是要表示成数字能还是字符呢?? (题外话:其实这里就是编译原理的问题了,上面的存储方式也涉及到计算机组成原理和基础的模拟电路之类的,所以小伙伴们一定不要嫌弃这些知识难学难懂,真的对理解代码有很大的帮助,博主就有点后悔没认真理解这些东西,以至于现在还要重新翻书复习。) 我们都知道,运行代码要下载编译器,比如我现在在用的Viusal Studio 2022。这就是编译器,帮助我们把代码翻译成计算机能理解的语言。那么我们就不用在手写汇编代码之类的东西了。(博主的汇编也都忘得差不多了,之记得当时要死要活的,太繁琐了) 总之编译器帮你搞定了很多东西,就比如这里的char,你告诉编译器char a='s',那么他就知道这是char类型,你输入a就不会给你返回个0111 0011或者115。 你告诉编译器int a=115,他就知道这是int类型,不会给你返回个s之类的东西。但其本质上,都是二进制数。 知道这些,我们就可以理解所谓的字符到底是什么了,至于字符是怎么从计算机内存中提取并输出到屏幕上现实的,这就是我目前的盲区,还有待学习。 好了以上罗嗦一大堆,但至少知道了字符的本质。接下来开始正式讨论字符串的东西了。
//在c中,定义一个 char类型的变量
char ch; printf("%c",ch);
//ch目前没有初始化,输出的也不知道是栈中哪里的东西,当然,我的编译也不准我输出,因为没初始化ch。
//对于没初始化的值,不同的编译器有不同的做法,反正只要记住,定义的变量一定要初始化就对了。
//char 大小为1byte=8bit,就是八位二进制,因为你看ASCII表,没有哪个字符的二进制ASCII码超过八位。
//问题是,char只有8位,那么就只能存一个字符喽?对,只能存一个,所以千万别多存。
//那我想存一长串字符怎么办?用字符数组或者指针
//缺点,字符数组的长度需要自定义,不支持动态扩展,不方便,而且字符数组以'\0'为结束符,假如你不小心在字符中间插入了一个'\0',那么输出的时候'\0'后面的字符就没了
char str_1[10]; scanf_s("%s", str_1,10); printf_s("%s\n", str_1);
//缺点,看到const了吗?这是个常量,你是不能改变的,只能赋初值,只能读不能写
const char* str_2; str_2 = "This is string."; printf_s("%s\n", str_2);
所以,以上C语言中的字符和字符串存在很多不方便的地方,为了解决这些问题,C++加入了string这一类型,不要把它当作一个关键字,它实际上是一个类,string类。
#include<string> int main() { std::string str; std::cin>>str; std::cout<<str; /* 常用函数 str.find(); str.size(); str.begin(); str.end(); str.substr(); str.insert(); str.replace(); str.append(); str.compare(); .... strcpy(); strcat(); strlen(); strcmp(); strchr(); strstr(); swap(); ..... */ return 0; }
关于字符串其实重要的还蛮多的,常用函数的用法也要记一下,总之,后面的习题会帮助加深理解的。
标签:字符,函数,计算机,C++,char,编译器,str,字符串,string From: https://www.cnblogs.com/HaveFunnyAnyone/p/17445981.html