您的位置:首页 > 其它

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

2014-03-28 17:55 260 查看
一、简单介绍相关问题

      声明一下,我们从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++;

         }

      }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐