字符数组、字符串与string问题与应用

一、简单介绍相关问题

      声明一下,我们从C风格和C++风格来分类讨论字符串问题。

      首先说一说C语言中的字符数组与字符串它们所表现的不同点问题:

      char str[7] = {‘n’,’i’,’h’,’a’,’o’}

      char str[5] = {‘n’,’i’,’h’,’a’,’o’}

      char str[] = {“nihao”}

      char str[] = “nihao”

      首先看第一行,数组一共是7个字节的空间大小,实际上有意义的只有5个字符,另外两个位置无法确定其值。再看第二行,数组正好就是是5个字节的空间大小,没有后边的多余字符。第三行和第四行其实是等价的,只是写法不同,它们占用的空间是几个字节呢?答案是6个,因为末尾系统自动添加了空字符'/0'

      前两行是纯正的字符数组,而后两行就是C风格的字符串了,即用字符数组表示字符串。另外,也可以通过指针来定义一个字符串,比如:char * pstr = “nihao”。

      再来看看C++语言中字符串相关问题。

   C++提供了3中表示C风格字符串的方法:字符数组、字符串常量、字符串指针。他们的类型都是char* (char指针),因此被自动作为char*类型参数传递给函数。字符串函数通过检测空值字符来确定字符串的结尾。

      在C++中我们可以用C风格的字符串,这个是兼容的,并且在<cstring>库中还提供了很多C风格的字符串操作函数:

          字符串复制函数:char *strcpy(char *s,const char ct)

          串连接函数:char *strcat(char *s,const char *ct)

          字符串比较函数:int strcmp(const char *cs,const char ct)

          字符串长度函数:int strlen(const char *s)

      除了C风格的字符串,C++还有自己的标准字符串类<string>,比如说string str = “hello”,对应的也提供了很多操作string的函数

   另外,注意一下下边这个:

     char name1[20] = "DreamerWay";

     cout<<sizeof(name1)<<endl;

     cout<<strlen(name1)<<endl;

   第一个输出是20而第二个输出是10,也就是说sizeof输出的数组所占空间大小而strlen输出的是数组中存储的字符串的长度。

二、应用(主要针对C风格的字符数组、字符串)

      1、字符指针作为函数的形参

      void  (char *from, char *to)

      {    

         for(; *form != '\0'; from++, to++)

           *to = *from;

        *to = '\0';

      }

      2、字符数组作为函数的形参

      void copy_string(char from[], char to[])

      {

          int i=0;

          while(from[i] != '\0')

          { to[i] = from[i]; i++; }

          to[i] = '\0';

      }

      3、字符输入输出

      char str[80], *p;

      p = gets(str);

      puts(p);

      puts(str);

      4、字符串作为函数形参

      void copy_s(char *str1,char *str2)

      {

          while((*str2=*str1)!='\0')

         {

            str1++;

            str2++;

         }

      }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值