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

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. TimeSpan 结构(struct)

    TimeSpan 是结构类型(struct),即值类型,可以通过两个DateTime(struct)之差来获得,如下例子: DateTime departure = new DateTime(2010 ...

  2. jQuery: Redirect to other URL

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...

  3. Cassandra 的数据存储结构——本质是SortedMap<RowKey, SortedMap<ColumnKey, ColumnValue>>

    Cassandra 的数据存储结构 Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型.它借鉴了 Amazon 的 Dynamo 和 Google's BigTab ...

  4. css中实现显示和隐藏(转)

    CSS中的display和visibility      在平时的开发过程中,总是会遇到一些文字在特定的场景下显示或者隐藏来达到我们想要的效果,css中display和visibility语法,他们都 ...

  5. c#的DateTime.Now详解

    (转自:http://www.cnblogs.com/lida/archive/2011/01/02/1924197.html) //2008年4月24日 System.DateTime.Now.To ...

  6. 【牛客练习赛12-B】迷宫(BFS)

    链接:https://www.nowcoder.net/acm/contest/68/B 题目描述 这是一个关于二维迷宫的题目.我们要从迷宫的起点 'S' 走到终点 'E',每一步我们只能选择上下左右 ...

  7. python基础之继承原理,多态与封装

    1.什么是继承? 继承是一种创建新的类的方式.class A: passclass B: pass2.如何继承---->如何寻找继承关系 现实生活中找继承关系是自下而上,在程序中写是自上而下继承 ...

  8. JavaScript能做的事 是不是jQuery都能做>?

    比如修改表单中的action 并实现跳转  问题是此时没有点击表单中的submit 提交按钮?

  9. L129

    Iraq Sees Spike in Water-Borne IllnessesIraqi health officials say that a health crisis stemming fro ...

  10. 程序员们,AI来了,机会来了,危机也来了

    程序员们,AI来了,机会来了,危机也来了 1.人工智能真的来了 纵观古今,很少有计算机技术能有较长的发展寿命,大部分昙花一现,比如:昔日的DOS.windows3.2.foxpro.delphi.80 ...