C++char字符

1.定义单个字符

char a;
a = 'x'; 
char b = 'x';
char c = 120;
cout<<a<<' '<<b<<' '<<c<<endl;
//x x x
cout<<(int)a<<' '<<(int)b<<' '<<(int)c<<endl;
//120 120 120

注意:char类型只能存储单个字符;C++允许char和int类型互换,将字符转换为int类型会返回该字符的ASCII值。

注意: 在ASCII码表中,前32个字符是不可见字符,后96个是可见字符。

2.输入输出

输入:

cin>>a;
scanf("%c",&a);
a = getchar();

上面三个方法等价。

输出:

cout<<a;
printf("%c",a);
putchar(a);

上面三个方法等价。

3.字符数组

定义:

char a[5] = {'y','e','s','!'};
//or
char a[5] = "yes!";

只有在赋初值的时候才能这样写。

位数不足自动补'\0'(空字符)

4.字符数组的输入输出

输入:

cin>>a;
scanf("%s",c);//注意使用scanf输入时不加&(取地址符)
gets(a);

注意:使用scanf输入时不加&(取地址符),输入会在遇到空格或者换行时结束,并在末尾加上'\0'

输入带空格的字符数组:

cin.getline(a,sizeof(a));

 :读取一整行,忽略末尾换行符'\n',并在末尾加上一个空字符。

cin.getline中必须设置读取字符上限,实际读取到的字符 = 上限-1

sizeof可以获取变量或数组的总字节数,对字符数组使用就相当于声明时的数组大小。

输出:

cout<<a;
printf("%s",a);
puts(a);

注意:输出在遇到'\0'结束,但puts()会多输出一个换行符。

7.更多操作

(1)求有效长度

strlen(a);
//例:
char a[20];
cin.getline(a,sizeof(a));//Hello world!
cout<<strlen(a);//12

作用:找第一个空字符的位置。 

时间开销:与计算结果成正比。

千万不要这么写!!!

//千万不要这么写!!!
for(int i = 0; i <= strlen(a); i++){
    //代码 
}
//每次循环都要strlen(a),很慢。

//可以这样优化
int l = strlen(a);
for(int i = 0; i <= l; i++){
    //代码 
}

(2)链接两个字符数组

strcat(c1,c2);
//例
char c1[20] = "Yes!",c2[10] = "hello!";
strcat(c1,c2);
cout<<c1;//Yes!hello!
cout<<c2;//hello!

作用:在c1中找到首个'\0',将c2全部复制在后面,然后加上一个'\0'。(c2不变)

strncat(c1,c2,n);
//例
char c1[20] = "Yes!",c2[10] = "hello!";
strncat(c1,c2,3);
cout<<c1<<endl;//Yes!hel
cout<<c2;//hello!

作用同上,但限制了长度。 

(3)比字典序

strcmp(c1,c2);

如果c1小返回-1,如果c2小返回1,一样返回0;

直到比出结果或遇到空字符。

strncmp(c1,c2,n);

作用同上,但限制了比较长度。

(4)复制

strcpy(c1,c2);
//例
char c1[20] = "abcdef";
char c2[10] = "xyz";
strcpy(c1,c2);
cout<<c1;//此时c1的值为"xyz\0ef",但打印到\0时会停止,所以只会打印"xyz"

作用:把c2的值复制在c1开头遇到\0结束,但会把c2末尾的\0复制过来

strncpy(c1,c2,n);
char c1[20] = "abcdef";
char c2[10] = "xyz";
strncpy(c1,c2,2);
cout<<c1;//xycdef

作用:限制长度复制,遇到\0结束

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值