C++字符串(C类型)

原创 2006年06月05日 11:17:00
     

    近几天,感觉没什么事作,又重新看了 C++ Programming Language (以前也没怎么认真看)这本 C++ 经典教程。但在第一部份就遇到了许多问题,以前根本就不太清楚。特别是 char 型指针的运用,不清它与 char 型数组,string 型数据的关系与区别。

       通过几天的学习,感觉已理解了部份,分析了写几种数据类,下面将具体说一说,希望大家提出建议。指出错误!

一.            假如现要存储数据 “abc”

分为两种方式:有带0结束标志的,无带0结束标志的。

1.      有结束标志的定义方法。

Char* ch = “abc”;     // strlen(ch) = 3;   size = 4;(结束标志)

Char  ch[] = “abc”;   // strlen(ch) = 3;   sizeof(ch) /sizeof(char) = 4;

其它还可以以显示的方法加0结束标志。

这两种方式相似,均以0标志字符串结束。所以它们都能用C里的一系列字符串处理函数,如:strcmp(); strcpy()[注意:传递的第一个参数不能是第一种数据类型]; strlen() 等。但它们的实际类型有很大区别。第一种的实际类型为 const char* ,所以不能用下标操作修改某个元素的值,这就说明了strcpy()的运用,但可以整体修改(ch = “aaaa”),因为指针不是常量,它只是一个指向常量的指针(此问题见const 运用)。而第二种是一个字符数组[注意与 char ch[] = { ‘a’, ‘b’, ‘c’ } 的区别]

2.      无结束标志的定义方法。

Char ch[] = { ‘a’, ‘b’, ‘c’ };    //sizeof(ch)/sizeof(char) = 3; 

//strlen(ch) = ? 错误方法,无0结束符。除非为:char ch[] = {‘a’,’b’,’c’,0}

Char* ch = new char[3];  ch[0] = ‘a’; ch[1] = ‘b’; ch[2] = ‘c’;  //strlen(ch) = ?  // size = 3;

String ch = “abc”;   // C++ 提供的 string 类。  //ch.size() = 3; 

在这几种方法中,C里的一系列字符串处理函数就没用了,因为它们要以有0结束符为前提条件。但在使用时可以人为的增加结束符,数组空间增加一个,并在最后一个值改为0来达到结束的条件,但这样用很不是方便。String 类型可以调用相应的函数转化为C类型的字符串(ch.c_str())String 类提供的一系列成员方法明显比 C 类型字符串处理更好,且不易出错。

3.      运用以上的方法可以分析一下面这个定义具体细节。

Char* ch[] = { ‘b’, ‘c’, ‘d’ };

Char* ch[] = { “bbb”, “aaa”, “ccc” };

(1).是否在确。

(2).sizeof(ch); sizeof(ch[1]); strlen(ch); strlen(ch[1]);

(3).ch[1] = “fff”; ch[1][0] = ‘f’; 是否可行。

(4).假如要复制此内容到另一个存储空间,怎样完成。

 

解:(1). 第一个错误,第二个正确。因为第一个是一个数组,且成员为指向字符串的指针,而初始化的数据为字符,可以改为:char* ch[] = { “b”, “c”, “d” }; 下面的题以第二个正确的为前提。

(2).sizeof(ch) = 12;   sizeof(ch)/sizeof(char*) = 3;

  sizeof(ch[1]) = 4;  //指针的长度

  strlen(ch) = ?;     //数组无0结束标志。可以多加一个:char* ch[] = {“bbb”, “aaa”,”ccc”,0};

  strlen(ch[1]) = 3;   //单个数据为 char* ,0结束符,可以计算。

(3).ch[1] = “fff”;     正确,因为它不是常量指针,只是指向常量的指针。

  ch[1][0] = ‘f’;     错误,修改常量。

(4). int size = sizeof(ch)/sizeof(char*);

           char** chh = new char*[size];

           for(int i = 0; i < size; ++i)

           {

              char* c = new char[strlen(ch[i]) + 1];

              strcpy(c, ch[i]);

              chh[i] = c;

    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C风格类型的字符串在C++中的应用

/*  *字符串常量(即字符串字面量)的一些问题  *处理字符串的一些函数  */ #include using namespace std; #include int ma...

C/C++ —— 十六进制类型字符串的转换

在实际工作中,字符串和其它数据类型的转换是很常见的,库函数有很多,比如 atoi , strtol , sscanf 等,这些函数网上有很多资料, 我经常用到的就是十六进制的数值以字符串的形式传输,...
  • jscese
  • jscese
  • 2014-09-04 18:57
  • 3399

C\C++ 程序员从零开始学习Android - 个人学习笔记(四) - java基础 - 数据类型、变量、字符串、数组

1,数据类型   java数据类型分为基本类型(原始类型、原生类型)和引用类型两种。 1.1 基本类型   包括布尔类型、数值类型、returnAddress类型。 1...

c/c++各种字符、字符串类型转换

CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓...

c/c++各种字符、字符串类型转换

itoa   功 能:把一整数转换为字符串   用 法:char *itoa(int value, char *string, int radix);   详细解释:itoa是英...

C/C++关于字符串string、char*字符串数组与其他类型转换

C/C++关于字符串string、char*字符串数组与其他类型转换

C++中的字符串类型

  • 2014-09-01 13:57
  • 70KB
  • 下载

C风格字符串&string类型

1.字符串常量 字符串常量是一个

C学习笔记之基础篇_转义符,ASII码对照表,字符字符串区别,数据类型转换

常用转义字符及其含义 原稿在这: http://download.csdn.net/detail/bbdxf/3728092 转义字符 含义 \...
  • bbdxf
  • bbdxf
  • 2011-10-28 10:41
  • 2363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)