c++字符串用法,C++ 字符串函数

  c++字符串用法,C++ 字符串函数

  最近遇到一个C项目,准备学习一些关于C的知识,由于我的大部分C语言知识已经还给老师了(什么指针的指针.),而且本人从事java相关开发多年,看了一天发现C的坑真的很大,没有急功近利,只能一点一点的啃。本文将记录刚刚遇到的字符串问题。

  开始代码:

  #包含stdio.h

  班级学生{

  公共:

  char *name=javaname . ;

  char ADRs[5]= test ;

  int age=1;

  浮动分数=0.5;

  void say(){

  printf(%s年龄为:%d,分数为:%f\n ,姓名,年龄,分数);

  }

  };

  int main() {

  班级学生stu

  stu.name=小明;

  str . ADRs[0]= a ;

  stu . age=2;

  stu.score=98.9

  stu . say();

  返回0;

  }编译,运行:

  [roo@localhost ~]$ g abc.cpp

  abc.cpp:4:13:警告:非静态数据成员初始值设定项仅适用于-std=c 11或-STD=GNU 11[默认情况下启用]

  char * name= javaname

  ^

  abc.cpp:5:15:警告:非静态数据成员初始值设定项仅适用于-std=c 11或-STD=GNU 11[默认情况下启用]

  char ADRs[5]= test ;

  ^

  abc.cpp:6:12:警告:非静态数据成员初始值设定项仅适用于-std=c 11或-STD=GNU 11[默认情况下启用]

  int age=1;

  ^

  abc.cpp:7:14:警告:非静态数据成员初始值设定项仅适用于-std=c 11或-STD=GNU 11[默认情况下启用]

  浮动分数=0.5;

  ^

  abc.cpp:4:13:警告:已弃用从字符串常量到“char*”的转换[-ww write-strings]

  char * name= javaname

  ^

  abc.cpp:在函数“int main()”中:

  abc.cpp:15:11:警告:已弃用从字符串常量到 char * [-wwwrite-strings]的转换

  stu.name=小明;

  ^

  //默认生成一个. out可执行文件

  [roo@localhost ~]$。/a.out

  小明年龄是:2,分数是:98.900002,地址:aest。结合这个例子,我们来总结一下c中与字符串相关的知识点。

  I .字符数组定义字符串:

  在C中,没有特殊的字符串变量,只能将字符串作为字符数组处理。在变量中存储字符串,必须使用字符数组,即用字符数组存储字符串,数组中的每个元素存储一个字符。

  一般我们用字符数组存储字符串的时候,首先要确定一个足够大的数组,但实际上我们用不了那么多,我们只关心它的有效位。c已经指定了一个“/0”来表示字符串的结尾。“/0”会自动添加到系统字符串常量中作为终止符。

  先看一个例子:

  #包括iostream

  #包括cstring

  使用命名空间std

  int main()

  {

  char a[10]= hello ;

  cout sizeof(a)endl;//10

  char b[]= hello ;

  cout sizeof(b)endl;//6

  char c[10]={h , e , l , l , o };

  cout sizeof(c)endl;//10

  char d[]={h , e , l , l , o };

  cout sizeof(d)endl;//5

  char e[10];

  strcpy(e, hello );

  cout strcpy: sizeof(e)endl;//10

  }1)字符数组以三种方式定义字符串:

  定义的时候直接用字符串赋值:char a[10]= hello ;而char a[]= hello ;一样的,不同的是sizeof大小不一样,字符数组中的字符是一个一个赋值的;char c[10]={h , e , l , l , o };使用strcpy: strcpy (e, hello );解释:# includechtring头文件需要引入才能使用strcpy,否则编译会报错,错误:“strcpy”未在此范围内声明。

  注意:char a[10]= hello ;而char a[]= hello ;一样的,但是在class类中给属性赋值的时候,只能用前者,否则会报错。例如,下面的方法将报告一个错误。错误:字符数组的初始值设定项字符串太长[-fpermissive]

  班级学生{

  公共:

  char *name=javaname . ;

  char ADRs[]= test ;

  int age=1;

  浮动分数=0.5;

  void say(){

  printf(%s年龄为:%d,分数为:%f\n ,姓名,年龄,分数);

  }

  };2)单引号和双引号:

  前者是字符,后者是字符串。由单引号引起的字符大小是一个字节。双引号引起的字符串大小是字符1的总大小,因为双引号引起的字符串会在字符串末尾加上一个二进制0字符 \0 。

  二。字符指针定义字符串:

  Char*是一个字符串的指针(实际上严格来说是一个字符串的第一个字母)。你可以让它指向一串常量字符串。用char*定义一个字符串,不能改变字符串中字符的内容,但是可以付给它另一个字符串。请看下面的例子:

  #包括iostream

  使用命名空间std

  int main()

  {

  char str[]= hello world ;

  char * p=str

  cout str endl

  cout p endl

  cout * p endl

  char * str1= java

  cout str1 endl

  cout * str1 endl

  str1= C

  cout str1 endl

  }

  输出:

  你好世界

  你好世界

  h

  爪哇岛

  j

  1.char *str和char str[]的区别:

  使用char*定义字符串不能改变字符串中字符的内容。

  #包含stdio.h

  int main()

  {

  char * str= hello C

  printf(%s\n ,str);//你好C

  str[0]= 1 ;//报告错误

  char str 3[]= sfdsdfdsfdsfdsfdsf ;

  str 3[0]= 1 ;

  printf(%s\n ,str 3);//1fdsdfdsfdsfdsfdsf

  char str 4[6]= 12345 ;

  str 4[0]= a ;

  printf(%s\n ,str 4);//a2345

  }注意:char指针*位置可以放在任何地方。例:char *str,char* str,char * str都一样。

  2.内存结构:

  下面这个问题,因为字符指针char *str指向一个字符串常量的地址,既然是常量,那么它的值一定不能重写!所以代码中所有给str[]赋值的语句都是非法的!看一个例子:

  #包括iostream

  使用命名空间std

  int main()

  {

  char * cards= JQK

  char a _ card=cards[0];

  cout a _ card endl//J

  卡片[2]=卡片[1];//报告错误

  cards[1]= x ;//报告错误

  }

  首先,编译器将字符串JQK常量存储在内存数据段的代码中。这段代码定义了一个字符指针变量卡片,所以编译器在堆栈空间中给它分配了一个单元。将数据段中代码字符串JQK的第一个地址赋给cards,即让cards指向数据段中的字符串JQK。代码要求取出字符串中的第二个字符,并将其值赋给字符串中的第三个字符单元。这里有一个问题,因为字符串所在的单元是只读的,不能写。所以我们在给指针赋字符串常量的时候,通常会用const关键字来限制,即const char * name= leon

  1)程序内存分配:

  c/C编译程序占用的内存分为以下几部分:

  堆栈:由编译器自动分配和释放,存储函数的参数值、局部变量的值等。它像数据结构中的堆栈一样工作。堆:一般由程序员分配和释放。如果程序员不释放它,它可能在程序结束时被OS恢复。全局(静态):全局变量和静态变量存储在一起,初始化的全局变量和静态变量在一个区域,未初始化的全局变量和未初始化的静态变量在另一个相邻区域。程序完成后,由系统释放。常量区域:常量字符串放在这里。程序完成后,由系统释放。代码区//main.cpp

  #包含stdio.h

  #包含字符串. h

  int a=0;//全局初始化区域

  char * p1//全局未初始化区域

  主()

  {

  int b;棚

  char s[]= ABC ;//堆栈

  char * p2//堆栈

  }2)堆和栈的基础知识:

  Stack:由系统自动赋值,比如在函数中声明了一个局部变量int b;系统自动在栈中为B打开空间。

  堆:需要程序员自己申请,并注明大小。C中的malloc函数,C中的new运算符P1=(char *)malloc(10);请注意,p1本身在堆栈中。

  三。字符串类:

  在c中,char仍然是一个原语类型,而string已经被封装成了一个类。使用的时候需要#include string,这是C标准库的一部分。

  它包含了对字符串的各种常见操作。与char*相比,它的优点是内容可以动态扩展,操作字符串方便快捷。用数字连接字符串是最常见的操作。

  与字符指针不同,C中字符串的定义可以改变字符串中的字符,或者你可以付给它另一个字符串。

  #包括iostream

  使用命名空间std

  int main()

  {

  string str= hello java

  cout str endl

  str= hello C

  cout str endl

  str[0]= 1 ;

  cout str endl

  }

  输出:

  你好java

  你好C

  1ello C描述:

  1)在c中使用string需要使用命名空间std除了头文件之外;否则会被举报,因为1998年以后的C语言提供了全局命名空间,可以避免全局命名冲突的问题。C标准库定义了命名空间:std,包含容器向量、字符串等。

  2)C代码中使用printf(%s ,str);当格式类似于字符串类型时,会报告一个错误:无法通过varidic函数传递非pod类型“string”(又名“basic _ string char”)的对象。原因是当printf,scanf,fprinf等。可以在字符串格式中使用“%s”,但只能使用cstring。如果是C字符串,必须改成CString:str . C _ str();

  原创作品来自正在路上的博主,转载请联系作者获得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: