您的位置:首页 > 其它

字符数组笔记

2016-03-07 16:09 281 查看
1.对定义的字符数值进行赋值,当所赋的值的长度大于数组所定义的长度时,该源代码不能通过编译,编译软件会自动报错; 2.对于所有的数组而言,当初值的个数与预定数组长度相同时,在定义时就可以省略数组的长度,此时系统或根据初值的个数确定数组的长度。即当对数组进行初始化时且初始化的值就是最终的值时,此时就可以省略去人为地计算数组长度的过程。 3.对于数组而言,除了初始化可以对数组进行一次性地赋值之外,后面就只能对数组进行单个的赋值(即要用下标表明具体的数组量)。 4.用sizeof()测量的是变量所占的字节数,自己以前的想法是错误的!当数组指明了长度,那么所测量出来的值是固定的(这点以前的想法是测量出来的是有效数据的长度),并且这个值由数据的类型来决定。当没有指明长度时,则测量出来的值是定义数据的长度,假若该数组是字符数组,则在定义数据数据的长度基础上还要加上一个空字符'\0'的长度! 5.数组名与指针不等价,数组名仅仅是指向数组的首地址!(数组和指针的关系有点复杂,现在自己还不是搞得很清) 6.字符串是结尾为结束符('\0')的字符数组; 7.对于一个字符常量,系统会在所有的字符后面加一个'\0'作为结束符,然后将其储存到字符数组里; 8.在程序中往往依靠检测'\0'的位置来判断字符串是否结束,而不是根据数组的长度来决定字符串的长度; 9.初始化字符数组:①.char str[ ]={"i am happy"};②.char str[ ]="i am happy"; 10.在c和c++中都可以通过输出数组名的方式来输出其对应的字符串(例如:printf("%s",a);cout<<a<<endl;) 11.如果一个字符串包含一个以上的'\0',则遇到第一个'\0'时输出结束; 12.
#include<iostream>
using namespace std;
int main()
{
char a[5];
cin>>a;
cout<<a<<endl;
return 0;
}
运行结果:

运行中输入的字符串明显的多出了数组的限制,开始还是照样的输出了。猜想应该是这种情况:从键盘上读入的字符串从数组名这个地址开始一直有顺序地储存,在储存的过程中并不会去检测数组的长度,只会在输入结束时在最后加上一个结束符('\0'),这也就可以解释为什么输出的结果也是这个样子的了。从此处看来,好像数组长度好像并有起什么作用,我想改是程序过于简单的缘故,程序复杂一点,定义的变量跟多一点也许就会有影响。而且数组长度时必须要定义的,不然编译通过不了。 13.对字符串的操作函数:(都储存在头文件string(string.h)里面)①.字符串连接函数strcat,函数原型为:strcat(char[ ],const char[ ]); 说明:第二个字符数组被声明为const,以保证该数组的内容不会再函数调用期间被修改;②.字符串复制函数strcpy,函数原型:strcpy(char[ ],const char [ ]); 说明:a.该函数的作用是将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖。(就是将第二个字符赋值给第一个字符,因为该语句常常用来做赋值语句,这样也就不难理解了,自己首先的理解是错误的。) b.该函数调用的形式不一定是数组名,也可以是一个字符字符串变量; c.可以用 strncpy函数将一个字符串中前若干个字符复制到一个字符数组中去。例如:strncpy("china","hechuyi",2),那么得到的第一个字符串为:heina; d.常用此函数对相关量进行赋值;③.字符串比较函数:strcmp,函数原型:strcmp(const char[ ],const char [ ]); 说明:①.字符串1等于字符串2,函数值为0; 字符串1大于字符串2,函数值为一正数; 字符串1小于字符串2,函数值为一负数; ②.字符串比较的规则与其他语言的规则相同。即对两个字符串自左而右逐个字符相比(按照ASCII值的大小),直到出现不同的字符或结束字符('\0')为止,比较的结果以第一个不相同的字符比较结果为准。④.字符串长度函数:strlen,函数原型:strlen(const char[ ]); 说明:①.其实测量字符串的实际长度,不包括'\0'在内;代码举例:(strcpy(),此函数也是C语言里面的函数,故头文件中要声明stdio.h)
#include<iostream>
#include<string.h> //Dev-c++里面好像要加后缀.h才可以编译
using namespace std;
int main()
{
cout<<"strcat函数举例:"<<endl;
char a[10]={"i am "},b[10]={"a boy"};
strcat(a,b); //其作用是将b数组的字符窜连接到a数组末尾
cout<<a<<endl<<endl;

cout<<"strcpy函数举例:"<<endl;
char c[6]={"china"},d[6]={"bring"};
strcpy(c,"dim");
strcpy(d,"c"); //其作用是将字符c替换数组d,将其与赋值语句联系起来编好理解
cout<<c<<endl<<d<<endl<<endl;

cout<<"strcmp函数举例:"<<endl;
char e[5]="fade",f[5]="fade",g[5]="faae",h[5]="fbde",i[6]="fadea";
cout<<strcmp(e,f)<<endl; //相等时值为 0
cout<<strcmp(e,g)<<endl; //e大于g时值为一个正数
cout<<strcmp(e,h)<<endl; //e小于h时值为一个负值
cout<<strcmp(e,i)<<endl<<endl; //比较到第一个不相同的字符为止

cout<<"strlen函数举例:"<<endl;
char j[10]="china"; //测量的是有效的长度
cout<<strlen(j)<<endl<<endl;

return 0;
}
运行结果:

14.C++中处理字符串的方法:字符串类与字符串变量; ①.C++提供了一种新的数据类型——字符串类型(string类型),string类型并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类型; ②.字符串类型的定义就和普通类型一样定义即可(例如:string str;),不过要注意的是假若要使用字符串类型定义就必须在头文件中进行#include<string>的声明; ③.值得注意的是#include<string.h>与#include<string>用法的差别,前者在进行字符类型数组函数的应用时声明,后者咋使用字符串类型定义的时候声明; ④.字符串变量和一般的变量用法基本类似,赋值时都可以直接用赋值符号,输出时直接输出变量名即可。同时在定义字符串变量时不需要指定长度,它的长度随着其中的字符串长度改变而改变; ⑤.可对字符串变量中的某一具体的数值进行操作:
string word="Then"; //
word[2]="a"; //修改序号为2的字符,修改后 word的值变为了than
⑥.在字符串的变量运算中,strcpy()赋值函数直接可以用赋值符号实现,strcat()连接函数可以直接用加法运算符实现,strcmp()比较函数可以用关系运算符实现;这样就使字符运算简便了很多; ⑦.string不仅可以用来定义字符串变量,还可以用来定义字符串数组,只不过字符串数组的长度表明的是可以装载元素的多少; ⑧.字符串数组中的每一个元素的值包含字符串本身的字符而不包括'\0';源代码例子:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str,a,b;
str="hechuyi"; //直接赋值
b="then";
a=str;
b[3]='a'; //对于特定位置的字符进行改动
cout<<str<<endl;
cout<<a<<endl; //直接输出
cout<<b<<endl;
cout<<b+a<<endl; //不用连接符,可直接相加
if(str>a) //可直接进行比较
cout<<"O(∩_∩)O哈哈~";
else
cout<<"~~~~(>_<)~~~~";
return 0;
}
运行结果:

补充:strncpy()函数; strncpy函数将一个字符串中前若干个字符复制到一个字符数组中去。例如:strncpy("china","hechuyi",2),那么得到的第一个字符串为:heina;源代码:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char a[6]="sorry",b[6]="hello";
strncpy(a,b,2);
cout<<a<<endl;
return 0;
}
运行结果:


补充说明:strncpy(),这是一个C语言里面的函数,储存在头文件为stdio.h里面,因此头文件必须声明(我的C++书上印刷错误了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: