C语言字符数组与字符串+十六进制转十进制+字母和汉字的存储差别+bool型变量+反斜杠代码换行 |
您所在的位置:网站首页 › c语言将字符串转换为十六进制 › C语言字符数组与字符串+十六进制转十进制+字母和汉字的存储差别+bool型变量+反斜杠代码换行 |
上一篇文章:C语言数组+推箱子小游戏 C语言字符数组与字符串+十六进制转十进制+字母和汉字的存储差别+bool型变量+反斜杠代码换行 字符数组与字符串字符数组的定义与初始化字符串puts与gets函数 更多常用处理字符串的函数汉字与英文字母的储存差别代码案例 A+B plus十六进制转换为十进制*补充bool型变量和abs()绝对值函数*补充反斜杠代码换行下一篇文章 先了解一下字符常量,字符常量很简单,就是用双引号引起来的字符序列,比如“Holle world”。字符串常量“Hello world”代表的是字符串首个字符的内存地址,所以可以用字符串常量直接给字符数组赋值 字符数组与字符串 字符数组的定义与初始化字符数组和普通的数字数组基本类似。 定义:char 数组名 [数组长度] 例如:char ch[10]; 并给它赋值: ch[0]=‘b’; ch[1]=‘e’; ch[2]=‘i’; ch[3]=‘j’; ch[4]=‘i’; ch[5]=‘n’; ch[6]=‘g’; 如果我只给了部分元素赋值,那么其他元素的值是不确定的。字符数组的初始化: 例如:char[5]={ ‘h’, ‘e’, ‘l’, ‘l’, ‘o’ }; 如果只是赋值一部分元素,那么没赋值的元素就会自动赋值‘\0’,即“空操作”,不可显示,也不起任何控制作用,只起一个标志作用。字符数组也可以定义成字符二维数组,同普通的二维数组一样。二维字符数组多用于多个字符串的处理。可以用字符串初始化二维字符数组。字符数组的引用,同普通的数组一样。 #include int main() { char ch[10]="hello"; for (int i = 0; i if (ch[i] >= 'a' && ch[i] 'H','e','l','l','o','\0'};“\0”是结束的标志,C语言中,所有对字符串的处理函数,都会忽略“\0”以后的内容。 由于系统在存储字符串常量时,会在串尾自动加上一个结束标志“\0”。 下面看一些细节上的问题: 细节一 #include int main() { char str_1[] = "hello",str_2[5] = "hello"; printf("%d,%d",sizeof(str_1),sizeof(str_2));//求字节长度时使用字符数组的名字,即字符数组的整体引用。 return 0; }我定义了两个字符数组,str_1和str_2,str_1没有给它数组长度,str_2给了它数组长度,然后用求字节长度关键字“sizeof”来分别求出它俩所占的内存为多少字节。 ![]() ![]() ![]() ![]()
注意:在使用scanf()输入字符串的时候,scanf()函数会自动跳过诸如空格、换行符和制表符等类似的前导空白字符,从第一个非空白字符开始,逐个扫描,并把扫描到的字符逐个复制到字符数组的连续存储空间中。当遇到空白字符时停止扫描,并自动在结尾处存入一个“\0”,停止标志符,即空字符NULL。 puts与gets函数puts函数和gets函数专门的字符串输出和输入函数。也包含在标准输入输出头文件stdio.h中。 C语言提供了很多处理字符串的函数,这些函数均包含在string.h头文件中。使用之前必须先#include strcpy()函数 调用:strcpy(字符数组名,字符串或字符数组);![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 在内存中,一个英文字母占一个字节,但是一个汉字占两个字节。 编写一个程序,输入两个100位的数字,并相加输出。无论是整型还是double型,都无法存储一个100位数的数据,所以可以用字符串来做。 #include int main() { int d=0,e=0,flag=0,h=0,la,lb; static int an[101],bn[101],cn[101]; char a[101],b[101]; while((a[d]=getchar())!='\n') { d++; } la=d; while((b[e]=getchar())!='\n') { e++; } lb=e; for(int i=100;i>0;i--) { an[i]=a[la-1]-'0'; la--; if(la==0) break; } an[0]=0; for(int i=100;i>0;i--) { bn[i]=b[lb-1]-'0'; lb--; if(lb==0) break; } bn[0]=0; for(int i=100;i>=0;i--) { if(flag==0) { if(an[i]+bn[i]>=10) { cn[i]=(an[i]+bn[i])%10; flag=1; } else { cn[i]=an[i]+bn[i]; flag=0; } } else { if(an[i]+bn[i]+1>=10) { cn[i]=(an[i]+bn[i]+1)%10; flag=1; } else { cn[i]=an[i]+bn[i]+1; flag=0; } } } for(int i=0;i int i, flag, j, count; char hexad[80]; long number; printf("Enter a string:");//提示输入字符串 do { flag = count = 0; for (i = 0; (hexad[i] = getchar()) != '\n'; i++) { count++; continue; } hexad[i] = '0';//这个语句是必要的,为了覆盖最后输入的回车字符,因为getchar()输入会把转义的回车字符也输入进去,这样下面判断是否输入了非十六进制字符时会判断错误 for (j = 0; j flag = 1; printf("您输入非十六进制的字符,请重新输入!\n"); break; } } } while (flag != 0); //这个do-while循环的功能是输入一个十六进制数,如果输入了非十六进制的字符,提示重新输入,再输入,直到输入正确为止 hexad[i] = 0;//如果前面输入正确了,再用字符串结束标志0把最后一个字符'0'覆盖掉 //后面的语句是把十六进制数转换为十进制数的语句 number = 0; for (i = 0; hexad[i] != '\0'; i++) { if (hexad[i] >= '0' && hexad[i] = 'A' && hexad[i] = 'a' && hexad[i] 语句; } abs()函数 abs()函数是求绝对值函数,但是只针对整型变量,不需要包含math.h头文件 fabs()函数也是求绝对值函数,既可以针对整型变量,也可以针对浮点型变量,但是必须包含math.h头文件 *补充反斜杠代码换行
编译预处理知识点梳理:宏定义+文件包含+条件编译 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |