这个地方困惑我好久了,废话不多说

char c1[]="12345";
char *c2="12345";
string c3="12345";
int a1=strlen(c1);
int a2=strlen(c2);
int a3=strlen(c3);//error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'size_t strlen(const char*)'
int b1=c1.length();//error: request for member 'length' in 'c1', which is of non-class type 'char [6]'
int b2=c2.length();//error: request for member 'length' in 'c2', which is of non-class type 'char*'
int b3=c3.length();

int a4=sizeof(c1)/sizeof(char);

int a5=sizeof(c2)/sizeof(char);

a1=5,a2=5,b3=5,a4=6,a5=4

a1=5,a4=6,个人理解,a1是字符串的长度(在遇到'\0'之前的字符个数),a4是数组的长度:http://www.360doc.com/content/06/0803/10/9577_172067.shtml

char s[100];
cout<<sizeof(s)<<endl;//结果是100

a5=4是因为指针占4个字节,char占1个字节,与c2中的内容没有关系。

http://stackoverflow.com/questions/905355/c-string-length

If you're using a std::string, call length():

std::string str ="hello";
std::cout << str <<":" str.length();// Outputs "hello:5"

If you're using a c-string, call strlen().

constchar*str ="hello";
std::cout << str <<":"<< strlen(str);// Outputs "hello:5" http://blog.csdn.net/shinehoo/article/details/5823756

C语言中没有专门的字符串变量,如果要将一个字符串存放在变量中,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。


<1> 定义: char c[10]
<2> 初始化: 
    最简单的方法即逐个赋值: char c[10]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 10个字符分别赋绐c[0]到c[9]10个元素。     如果初值个数小于数组长度,则只将这些字符赋绐数组中前面的元素,其余元素自动定为空字符(即'\0')。
    如char c[12]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 则c[10]、c[11]值都为'\0' 。   C语言中,将字符串作为字符数组来处理。一般我们用字符数组来存放字符串时,都要先确定一个足够大的数组,而实际并用不了那么多,而我们只关心其有效位,为测定字符串实际长度,C规定了一个"字符串结束标志",以字符 '\0' 代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到字符'\0'时,表示字符串结束,由它前面的字符组成字符串。
    系统对字符串常量也自动加一个'\0'作为结束符。
  可以用字符串常量来初始化字符数组。如:
    char c[]={"I am happy"};
    也可直接写成:
    char c[]="I am happy"; 注意此时数组的长度不是10,而是11,因为系统自动加上了'/0'结束符。

字符数组不要求最后一个字符为'\0',而为了使处理字符数组和字符串的方法一致,便于测定字符串的实际长度,能及方便在程序中处理, 在字符数组末尾也常加上一个'\0'。

  http://www.cnblogs.com/jeffchen/archive/2006/05/09/395535.html

  以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写  "abc",那么编译器帮你存储的是"abc\0"



PS:一道字符串的题目
假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。要求高效!
 #include <iostream>
using namespace std; bool isLike(const char *a,const char *b)
{
int c[]={};//ASCII码有128个
int i;
while(*a!='\0')
{
c[(int)*a]++;
a++;
}
while(*b!='\0')
{
c[(int)*b]--;
b++;
}
for(i=;i<;++i)
{
if(c[i])
return false;
}
return true;
}
int main()
{
bool b1,b2,b3,b4;
b1=isLike("abcasd","abcdas");
b2=isLike("aaa","aab");
b3=isLike(" "," ");
b4=isLike("","");
cout<<b1<<b2<<b3<<b4<<endl;
return ;
}
 

字符串,字符数组(C/C++)的更多相关文章

  1. JAVA关于字符串&&字符数组处理的小题目

    JAVA关于字符串&&字符数组的小题目 第二题:分析以下需求,并用代码实现 1.键盘录入一个大字符串,再录入一个小字符串 2.统计小字符串在大字符串中出现的次数 3.代码运行打印格式: ...

  2. 字符串 字符数组, pcha string 之间的相互转化, 很重要。 很蛋疼

    http://www.cnblogs.com/del88/p/5448981.html Delphi字符串.PChar与字符数组之间的转换 来自:http://my.oschina.net/kaven ...

  3. Delphi的字符串、PChar和字符数组之间的转换

    参考:http://my.oschina.net/kavensu/blog/193719 以下的各种方法都是我在Delphi 6的环境下测试成功的,可能根据你的开发环境.不同的上下文语境……有一些可能 ...

  4. c语言字符数组与字符串的使用详解

    转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

  5. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  6. Delphi字符串、PChar与字符数组之间的转换

    来自:http://my.oschina.net/kavensu/blog/193719 ------------------------------------------------------- ...

  7. C 语言字符数组的定义与初始化

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'} ...

  8. linkin大话数据结构--字符串,数组,list之间的互转

    在实际开发中,我们经常会用到字符串,字符数组,字符list,当然也会不可避免的进行这3者之间的互相转换. 在使用到Apache和Google下的common包,可以这样子实现: package tz. ...

  9. c语言字符数组的初始化问题

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  10. String与包装类_字节数组_字符数组间的转换

    1.字符串与基本数据类型,包装类之间的转换 2.字符串与字节数组间的转换 3.字符串与字符数组间的转换 4.String与StringBuffer ①String---->StringBuffe ...

随机推荐

  1. 委托,lambda,匿名方法

    lambda表达式其实就是匿名方法的变体或者说简写. 原来我们用 delegate void Del(int x); Del d = delegate(int x) { return x + 1; } ...

  2. 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据

    在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...

  3. 解决loadrunner在脚本回放时长时间等待及在vugen中create controller scenario时报错的方法!超管用!!

    解决loadrunner在脚本回放时长时间等待及在vugen中create controller scenario时报错的方法 经过咨询,有两种方法.经过实践,下面的方法1有效,方法2无效(我下载安装 ...

  4. html的meta总结,html标签中meta属性使用介绍(转)

    html的meta总结,html标签中meta属性使用介绍 2014年11月5日 5928次浏览 引子 之前的我的博客中对于meta有个介绍,例如:http://www.haorooms.com/po ...

  5. PS常用美化处理方法大全

    学习PS的同学都知道,我们日常生活中使用PS就是进行一些简单的图像美白,图像颜色的优化,其他的基本不用,在长时间的PS使用过程中本人总结了一些处理皮肤的方法,都是一些非常简单的方法,希望能够帮助那些刚 ...

  6. Robot Framework接口测试(3)--http请求之post

    http请求更多的是post请求,我们可以:查看说明:很多网站在登录的时候需要加上头部信息即headers,这个信息可以通过抓包工具获得——fiddler,一个轻量级的抓包工具,大神用了都说好~这里模 ...

  7. String类的一些常规方法

    String类 String类常用方法: ①length(): length()       长度    方法** 对比:数组.length      属性** 一般情况下,一个数字,一个字母,一个汉 ...

  8. 一线互联网公司必备——最为详细的Docker入门吐血总结

    在计算机技术日新月异的今天, Docker 在国内发展的如火如荼.     特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,不信的话看看下面这张图.     ...

  9. 积累 ---- PHP可能会遇到的面试题

    1.白盒测试和黑盒测试的区别 2.Bootstrap是什么 3.OOP是什么意思 4.git和svn的使用 5.常用的git命令 6.lamp开发环境 7.高内聚,低耦合

  10. FastAdmin 增删改查在哪里?

    FastAdmin 增删改查在哪里? 一键生成 CRUD think crud -t test -u 1 执行命令合会在 controller 下生成 Test.php 控制器. 但是这个文件里确看不 ...