首页 > 编程语言 >关于C++字符串的一些函数

关于C++字符串的一些函数

时间:2023-05-31 14:22:43浏览次数:49  
标签:字符 函数 计算机 C++ char 编译器 str 字符串 string

其实印象里,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

相关文章

  • C++ 运算符
     运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++内置了丰富的运算符,并提供了以下类型的运算符:算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。ht......
  • proc c++ vs设置
    1、在pc文件上右键,项类型中选择自定生成工具,点击应用才能看见自定义生成工具2.命令行和输出中中配置,proc是oracle的执行程序在(client_1\BIN)目录下 ......
  • c/c++零基础坐牢第十七天
    c/c++从入门到入土(17)开始时间2023-05-30 21:31:54结束时间2023-05-31 13:29:07前言:第九章多态性从作业七作业八实验三和读书笔记及体会四个方面进行学习分享,课本知识参考于清华大学出版社郑莉老师的《C++语言程序设计》第五版,以下为自制思维导图: 第九章 多态性1面向......
  • C/C++数据结构课程设计[2023-05-31]
    C/C++数据结构课程设计[2023-05-31]数据结构课程设计实验(训)指导书所在学院:计算机科学与工程学院编写说明一.实验总体目标《数据结构》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。本实验的目标是,学生能正确理解和熟练掌握常用数据结构和算......
  • Python 函数
    函数返回多个返回值defmultiple_return_value():importdatetimed=datetime.date.today()val_1='年份为:{}'.format(d.year)val_2='月份为:{}'.format(d.month)returnval_1,val_2#只需在return关键字后跟多个值(依次用逗号分隔)val=mult......
  • C++四种强制类型详解
    向上转型(上行转换)派生类对象转换为基类对象(包括指针和对象),直接转换由编译器完成,是绝对安全的内存里面:基类对象相当于只是换了个地址,换成了派生类中存储基类成员的内存地址,但是派生类对象中有的,基类没有的变量仍然存在内存中(保留了再次从基类转换成派生类的可能性)向下转型(下行......
  • python 中 re.match和re.search()函数
     两者都返回首次匹配字符串的索引,re.match函数只从头开始匹配,re.search函数不限制只从头开始匹配。001、re.match函数[root@PC1test2]#python3Python3.10.9(main,Mar12023,18:23:06)[GCC11.2.0]onlinuxType"help","copyright","credits"or"license"......
  • C/C++杂记:运行时类型识别(RTTI)与动态类型转换原理
    运行时类型识别(RTTI)的引入有三个作用:配合typeid操作符的实现;实现异常处理中catch的匹配过程;实现动态类型转换dynamic_cast。1.typeid操作符的实现1.1.静态类型的情形C++中支持使用typeid关键字获取对象类型信息,它的返回值类型是conststd::type_info&,例:#include<type......
  • C/C++杂记:虚函数的实现的基本原理
    1.概述简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。例:其中:B的虚函数表中存放着B::foo和B::bar两个函数指针。D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(override)了基......
  • C/C++杂记:深入理解数据成员指针、函数成员指针
    1.数据成员指针对于普通指针变量来说,其值是它所指向的地址,0表示空指针。而对于数据成员指针变量来说,其值是数据成员所在地址相对于对象起始地址的偏移值,空指针用-1表示。例:代码示例:structX{inta;intb;};#defineVALUE_OF_PTR(p)(*(long*)&p)int......