c语言定义字符串 c语言定义字符串
程序是对数据的表示和处理 。对于数值型数据,可以直接处理;对于数值型以外的数据,例如文本(字符和字符串),图形图像,音频视频,还涉及到数据的表示(数据编码)的问题 。
1 C语言对字符和字符常量的约定字符编码有ASCII、GB2312,Unicode等 。处理字符或字符串数据时,其实质是对字符编码的操作 。ASCII编码使用一个字节的整数来编码西文字符,而整数在计算机中是区分signed和unsigned的,对于unsigned的,一个字符的表示范围是0-255(0x00000000-0xFFFFFFFF),对于signed,通常使用补码来编码,也就是区分符号,一个字节的值域(表示的整数范围)是:-128~127,虽然ASCII只使用了0x00000000~0x0FFFFFFF的区段(0-127),但字符类型为了与数值型整数在处理时达到统一,char类型也可以区分unsigned和signed,char默认是signed的 。
ASCII对数字字符进行连续编码,字符转数字只需减去'0'即可:
char ch = '3';int d = ch-'0';// 字符转数字ASCII对大写字母和小写字母也进行了连续编码,为方便处理(包括大小写转换),但其编码值做了特殊考虑:
Bin
Oct
Dec
Hex
【c语言定义字符串 c语言定义字符串】缩写/字符
解释
(二进制)
(八进制)
(十进制)
(十六进制)
0100 0001
101
65
0x41
A
大写字母A
0110 0001
141
97
0x61
a
小写字母a
大、小写字母只有在第6位(从低位到高位)存在区别,这样在大小写转换时特别方便 。
char str<> = "AbCdEf";char *p = str;while(*p!='\0')(*p++) |= 'a'-'A';// 如果是大写,改成小写,将log2('a'-'A')=log2(32),将低位到高位的第6位置1;printf("%s\n",str); // abcdefp = str;while(*p!='\0')(*p++) &= ~('a'-'A');// 如果是小写,改成大写,将log2('a'-'A')=log2(32),将低位到高位的第6位置0;printf("%s\n",str); // ABCDEF转义字符也可以用ASCII码来表示字符,但只能用8进制或16进制,8进制0开头例如'\023'且最多3位、16进制x开头例如'\xa'且最多两位;
printf("%c %c %c\n",'\060',48,'\x30');// 0 0 0,用8进制表示转义字符时,前导0可以省略printf("%c %c %c\n",'\101',65,'\x41');// A A A,用8进制表示转义字符时,如果超过3位,不要用前导0printf("%c %c %c\n",'\0101',65,'\x41');// 1 A A// '\0101'在内存中变成了831h,四个位存储'\010',也就是8h,四个位存储'1',也就是31h,// 其整数就是831h,截断成一个字节后就是31h,也就是字符'1'在C中,unicode编码的字符一般以wchar_t类型存储,固定使用两个字符的长度 。
typedef unsigned short wchar_t;
#include<stdio.h>#include<stdlib.h>#include <locale.h>int main(void){char s<>="中";//汉字在C/C++中是用2个字节表示printf("%d %d\n",s<0>,s<1>);char m<3>;m<0>=-42;m<1>=-48;m<2>=0;puts(m);//两个字节连起来凑成一个汉字 。printf("%c%c\n",s<0>,s<1>); printf("%c%c\n",214,208);//d6,d0 //都是字符256模数的关系(补码+其负数补码 = 模) setlocale(LC_ALL, "chs"); wchar_t wc = L'\x4E2D'; wprintf(L"%c\n",wc); system("pause");return 0;}/*-42 -48中中中中*/中英文混合的字符统计:
#include <stdio.h>#include <string.h>int gbk_strlen(char* str){char* p = str;//p用于后面遍历while(*p)//若是结束符0,则结束循环{if(*p < 0 && (*(p+1)<0 || *(p+1) < 63))//中文汉字情况{str++;//str移动一位,p移动移动2位,因此长度加1p += 2;}elsep++;//str不动,p移动一位,长度加1}return p-str;//返回地址之差}int main(){char str<> = "abc你好123中国456";printf("%d\n",strlen(str)-gbk_strlen(str)); // 4getchar();}2 C语言对字符串的约定C语言中,字符串是借助于字符型的一维数组来存放的,并规定以字符'\0'作为字符串结束标志 。由前面的知识我们知道,‘\0'是一个转义字符,称为“空值”,它的ASCII编码值为0 。‘\0'作为标志占用存储空间,但不计入串的实际长度 。
在字符串输出或逐个字符处理时,或者需要其长度信息,或者有一个结束标志,如果选择一个结束标志,在字符串处理时会更加方便 。循环时可用字符结束标志作为循环结束标志,在用作函数参数时,不需要额外提供一个长度参数 。
例如字符串处理的库函数都是以'\0'结束标志为循环终止条件的,包括strlen(),如果用strlen()去处理字符数组,除非其有一个显式'\0'的声明,否则会出错 。
- 工程管理是干什么的
- 河北大学好吗尤其是汉语言文学
- 1C快充到底是什么定义
- 语言和思维的关系
- 1CM的标准长度是怎么定义的
- 语言和文化的关系
- 相声是一种什么的语言表演艺术
- 相声的特点
- 发病率与患病率的区别
- 风量计算公式
