char c[3];
c[0] = 'a';
c[1] = 'b';
c[2] = 'c';
char c[3] = {'a','b','c'};
char [] = {'a','b','c'};
数组c长度自动定位3
char c[3][3] = {{a,b,c},{d,e,f}};
char c[] = {"abc"};
char c[] = "abc";//可以省略大括号,效果同上
char str[5] = {'a','b','c'};
只有用字符数组存字符串时,才需要补充’\0’。
字符串实际长度3和数组长度5并不相等,在存放上面3个字符之外,系统字符数组对最后两个元素自动填补空字符’\0’。
为了测量字符串的实际长度,C++规定一个字符结束标志,以字符’\0’代表。
上面例子中,第四个字符为’\0’,表明字符串的有效字符为前面3个字符。也就是说遇到字符’\0’表示字符串到此结束,由它前面的字符组成字符串。
char c[] = {"abc"};//数组长度不是3而是4,和下一行等价
char c[] = {'a','b','c','\0'};
char c[] = {'a','b','c'};//不和上面的等价,但是格式同样合法
只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值。
数组只能在初始化时整体赋初值。以后再赋值只能逐一改变了
char c[5];
c = {'a','b','c'}; //错误,不能对整个数组一次赋值
c[0] = 'a'; //对数组元素赋值,正确
c[1] = 'b';
c[2] = 'c';
方法一:scanf输入 printf输出
单个字符的输入和输出:
char str[10];
for(i=0;i<5;i++) scanf("%c", &str[i]);
for(i=4;i>0;i--) printf("%c", str[i]);
字符串整体输入输出:
char str[10];
scanf("%s", str);/*数组名str是数组的起始地址,不用&str*/
printf("%s", str);
方法二:gets输入,puts输出
输入:gets(字符数组名称)
gets用来从终端输入一行字符串并将其存放于一维数组(或二维数组的一维)中,读取字符串直到换行符结束,但换行符会被丢弃,然后再末尾添加‘\0’结束标
一次只能输入一个字符串,从光标开始到换行符,即输入的是一整行,且可以识别空格并将其输入,如果希望以空格作为分隔,即使用方法一。
输出:puts(字符数组名称)
将一个字符串输出到终端,并在输出时将字符串结束标记’\0’转换成’\n’,即输出完字符串后换行。
用puts函数输出的字符串中可以包含转义字符。
#include
int main(){
char str1[20];
char str2[5][10];
gets(str1);
for(int i = 0; i < 3; i ++){
gets(str2[i]);
}
puts(str1);
for(int i = 0; i < 3; i ++){
puts(str2[i]);
}
return 0;
}
注意:用puts和gets函数只能输出或输入一个字符串,不能写成:
puts(str1,str2);
gets(str1,str2);
方法三:getchar输入,putchar输出
getchar和putchar分别用来输入和输出单个字符。getchar可以识别换行符和空格并将其保存。
#include
int main(){
char c1, c2, c3;
c1 = getchar();
c2 = getchar();
c3 = getchar();
putchar(c1);
putchar(c2);
putchar(c3);
return 0;
}
在这里我们如果输入“a“,然后敲回车,然后输入”bc“,再敲回车,输出的结果会是这样:
a
b
这是由于getchar可以识别换行符,所以c2实际上存储的是换行符,因此字符c没有被存入,字符ab之间会有一个换行出现。
详见上文
详见上文
strcat(str1,str2);
把两个字符数组中的字符串连接起来,把str2接到str1的后面,结果放在str1中,函数调用后得到一个函数值——str1的地址。
举例:
char str1[30]=("Peoples Republic of");
char str2[]=("China");
printf("%s",strcat(strl , str2)) ;
输出结果:
People’s Republic of China
strcpy(字符数组1,字符串2);
将字符串2复制到字符数组1中去
举例:
char str1[10],str2[]="China";
strcpy(strl,str2);
strcpy(strl,"China");
作用与前面相同。
str1="China";//企图用赋值语句将一个字符串常量直接赋给一个字符数组
str1= str2;//企图用赋值语句将一个字符数组直接赋给另一个字符数数组
只能用 strcpy 函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。如下面的语句是合法的:
char a[5],cl,c2;
cl='A';c2='B';
a[0]='C';a[1]='h';a[2]='i';a[3]='n';a[4]='a';
strncpy(strl,str2,2);
作用是将str2 中最前面2个字符复制到 str1 中,取代str1 中原有的最前面2个字符。但复制的字符个数n不应多于str1 中原有的字符(不包括 ‘\0’)。
strcmp(str1,str2);
比较字符串1和字符串2
例如:
strcmp(strl ,str2);
strcmp("China","Korea") ;
strcmp(strl,"Beijing );
说明:
字符串比较的规则是:将两个字符串自左至右逐个字符相比(按 ASCII码值大小比较),直到出现不同的字符或遇到’\0’为止。
(1)如全部字符相同,则认为两个字符串相等;
(2)若出现不相同的字符,则以第 1 对不相同的字符的比较结果为准。
如果参加比较的两个字符串都由英文字母组成,则有一个简单的规律:
在英文字典中位置在后面的为“大”
例如:
computer 在字典中的位置在 compare 之后,所以”“computer”>“compare”。
但应注意小写字母比大写字母“大”,所以”DOG"<"cat”。
比较的结果由函数值带回。
如果字符串1=字符串 2,则函数值为0。
如果字符串 1>字符串 2,则函数值为一个正整数
如果字符串 1<字符串 2,则函数值为一个负整数
注意:对两个字符串比较,不能用以下形式:
if(strl>str2)
printf("yes");
而只能用
if(strcmp(strl,str2)>0)
printf("yes");
strlen(字符数组)
测试字符串长度的函数,函数的值为字符串中的实际长度(不包括\0’在内)
char str[10]="China":
printf("%d",strlen(str));
strlen("China");//也可以直接测试字符串常量的长度
输出结果:
5
strlwr(字符串)
strupr (字符串)
C/C++ 字符数组的输入输出
C++:字符数组
《C程序设计(第四版)》(谭浩强,清华大学出版社)