您现在的位置是:首页 > 网络趣梗网络趣梗

c++字符串比较大小(C语言字符串怎么比较大小)

2022-08-15 09:05:47网络趣梗0人已围观

简介  c++字符串比较大小(C语言字符串怎么比较大小),新营销网红网本栏目通过数据整理汇集了c++字符串比较大小(C语言字符串怎么比较大小)相关信息,下面一起看看

  c++字符串比较大小(C语言字符串怎么比较大小),新营销网红网本栏目通过数据整理汇集了c++字符串比较大小(C语言字符串怎么比较大小)相关信息,下面一起看看。

   01

   —

   char[]和char*之间的比较和转换

  在C编程中,很多时候我们会遇到如何比较char[]和char*。当然,一般来说,我们用strcmp。当然,看过C primer,我们都知道不能用“==”。所以我们先来看看直接用“==”是什么样的结果。

  如下面的程序:

   # includeusing使用命名空间stdint main(){ char arrTest1[]= ABC ;char arrtest 2[]= ABC ;cout(arrtest 1==arrtest 2)endl;char * pTest1= abcchar * pTest2= abccout(ptest 1==ptest 2)endl;}这个程序的结果是:第一类是0,而第二类是1。

  问题3360分析

  那么为什么会有这样的结果呢?首先要知道的是“==”这里不是指的内容abc,

  比较的结果是,指向内容的地址存储在每个arrTest1和arrTest2对象中,换句话说,是abc的地址,而不是它们自己存储的值。

  数组对象

  对于数组对象,是运行时在堆栈空间上分配的内存,所以每个对象都是单独申请内存的,每个对象都保留自己的abc,所以数组对象存储的地址也是不同的,所以第一个结果是假的;

  指针对象

  对于指针对象,两个字符指针没有分配相应的存储区域,但是后面的abc有一个字符串常量形式的常量区域,然后把第一个地址的值赋给指针对象,那么指针对象存储的地址应该是相同的,所以第二个结果为真;

  我们可以想到打印相关地址,看看结果是否正确,但这里有一个问题:

  数组对象直接打印在数组对象下面,其实就是打印数组对象的内容,结果是abc。

   cout arrTest1 endlcout arrTest2 endl对于数组对象,数组的第一个地址可以这样打印。从这里可以看出,两个地址是不同的,也就是两个abc的存储空间不同。

   cout arrTest1 endlcout arrTest2 endl输出结果如下:

  指针对象

  直接打印下面的指针对象实际上打印的是指针对象的内容,结果是abc,所以打印是合理的。

  它应该是打印字符串的第一个地址,因为cout是重载的,地址是在打印字符指针时给出的。

  它打印的不是地址内容,而是相对字符的内容,所以你会得到abc结果。

   cout pTest1 endlcout pTest2 endl

  但是如果打印的是指针的地址,那么两个地址就是错的,因为打印的是指针变量的地址,而不是被指向字符串的第一个地址,当然这是不一样的。

   cout pTest1 endlcout pTest2 endl

  如果想得到指针对象的字符串第一个地址的值,需要让cout输出字符不认为是字符指针,

  这样就不会有重载操作,这样你就可以看到两个输出的地址是一样的。

   cout(void *)ptest 1 endl;cout(void *)ptest 2 endl;

  输出结果如下:

  然后,在直接比较char[]时,可以使用以下函数:

  如果要比较的对象是char*字符串

   int strcmp(const char* s1,const char * S2);char a[10]="abc ",c[1000]=" ABC ";printf("%d ",strcmp(a,c));//返回0表示相等

   2.如果要比较的对象是两个字符串,请使用函数compare()或==

   s1 .比较(s2)

   3.注意:

  中C string类型和char*类型的字符串比较示例。与strcmp比较时,需要先将string转换成char*类型再进行比较。这时可以用c_str()函数进行转换。

  当然compare有如下重载,可以直接用char*或者char[]比较string

   int compare(const char * s)const;# include iostream # include cstring使用命名空间stdint main(void){ const char * passwd= AP _ passwd ;string str= ap _ passwdcout passwd= passwd ,str= str endlif(str.compare(passwd)==0){ cout The compare euqal!endl}else{cout 不等于!endl}返回0;} run: passwd=AP _ passwd,str=AP _ passwd the compare euqal!02

   —

  三者之间的转化

  三者之间的转化

   1.如何将string类转换成char *?

  首先要明白,字符串可以看作是一个容器,以字符为元素。形成一个字符序列(字符串)。有时,在遍历字符序列时,标准字符串类提供STL容器接口。有一些成员函数比如begin()和end(),迭代器可以根据它们来定位。

  请注意,与char*不同,string不一定以NULL( )结尾。根据length()可以得到字符串的长度,根据下标可以访问字符串。因此,string不能直接赋给char*。

   string转换成char*有三种方法:1.datastring str= abcchar * p=(char *)str . data();2.c _ strstring str= gdfdchar * p=str . c _ str();3.copystring str= hellochar p[40];str.copy(p,5,0);//这里5代表复制的几个字符,0代表复制的位置*(p 5)=”;//手动添加终止符2.char[]转换为string类

  直接分配就行了。

   3.字符串类被转换为char[]

   char *strcpy(char *a,const char * b){ if(a==NULL

  

   b==NULL)exit(0);char * c=a;while((*a=*b)!=);返回c;} char c[20];字符串s= 1234STRCPY (C,S.C. _ STR())相关文章粤语歌网(经典粤语歌汇总)

  北京奥特莱斯(来北京必去的12家商场)

  英雄超级放肆(还记得英雄超级放肆吗?)

  龚自珍资料(清代诗人龚自珍生平事迹简介)

  象牙塔是什么意思?(“象牙塔”有什么不好?)

  彩色风信子(水培风信子容易养)

  京字怎么读?

  于吉是哪里人?(古代著名美女于吉在哪里?)

  三本事业单位(我们还有哪些“三本”?)

  电子酒柜(酒柜最全指南)

  德州景点(德州62个景点)

  玉兰油官网(玉兰油发布高端精华系列)

  更多c++字符串比较大小(C语言字符串怎么比较大小)相关信息请关注本文章,本文仅仅做为展示!

Tags: 网络趣事  

很赞哦! ()

随机图文

留言与评论 (共有 条评论)
验证码:

本栏推荐