c语⾔将⼀个字符输出三遍,C语⾔字符相关部分内容⼩结
很多初涉编程的同学,在有些知识点上不够系统化或者说不能够将知识点联系起来,甚⾄对有些知识点有妖魔化的趋势,先说⼀下,这点是完全没有必要的,对于程序的编写,我个⼈认为这是⼀件很有美感的事情,所以不必预先给⾃⼰太⼤的⼼理压⼒去进⾏这⽅⾯的学习与⼯作。
今天就字符部分相关的⼀些知识点作⼀个⼩结。
⼀、 字符及由字符构造出来的⼀些类型的概念和特点
a) 字符:字符是由单引号引起来的单个的字符或转义字符。
b) 字符串:字符串是由双绰号引起来的N个字符序列,这⾥的N可以是1个,可以是多个,也可以为0,也就是⼀个空串。
概念的理解很重要,是区分不同类型的基准。
⼆、 存储
字符的存储实质上存储的是其相应的ANCII码。
⽽ANCII码分为三部分,第⼀部分共32个,⼀般且来通讯或作为控制之⽤,有些可以显⽰于屏幕上,有些则⽆法直接显⽰在屏幕上,但能看到其效果;第⼆部分共96个,⽤来表⽰阿拉伯数字、英⽂字母⼤⼩写及底线括号等符号;第三部分共128个,为扩充字符,⽤来表⽰框线、⾳标及其他⾮英语系的字母。
由上述可见,字符类型的特殊性在于任何的操作及控制如果放在字符类型中都是有效的录⼊,意味着要进⾏字符类相关操作的时候要进⾏更加细⼼和周全的考虑和控制。
基本类型中并没有字符串类型,需要我们⾃⾏去构造,所以对于字符串的存储我们需要借助于数组,也就是利⽤字符数组去存储字符串。若以字符串常量的⽅式给⼀个字符数组赋值,如char str[]=”hello”,则系统在进⾏存储时,存储’h’,’e’,’l’,’l’,’o’这五个字符外,会多开辟⼀个空间存储’\0’,⽤以作为⼀个串的结束标志,这也是我们通常在对⼀个串进⾏操作时所利⽤的结束条件。
三、 输⼊与输出
字符的输⼊与输出可以使⽤标准输⼊输出函数scanf(),printf(),利⽤上述函数中的%c格式进⾏输⼊与输出,还可以利⽤针对字符的输⼊输出函数putchar(),getchar()。
字符数组部分的输⼊与输出可以分两种⽅式:⼀种是采⽤单个字符⽅式,即把字符串中的每个元素都
看作⼀个字符,进⾏单个输⼊或输出,可以借助上述字符的输⼊与输出,这⾥就需要⽤到循环来进⾏单个字符的控制,或者采⽤标准输⼊输出中的%s针对字符串进⾏操作;另外可以使⽤专门针对字符串的输⼊输出函数gets(),puts()。
注意:1)在字符的操作中,刚刚解释过了任何的输⼊及控制都会被当作有效的字符录⼊,所以如果控制不周全,则在终端上进⾏的回
车,TAB键等等的操作都会当作有效的录⼊,这也就需要我们在对程序进⾏控制的时候注意该⽅⾯的问题。
2)对于字符串部分如果采⽤使⽤单个字符赋值的⽅式,如char str[5]={’h’,’e’,’l’,’l’,’o’},系统会存储五个字符,这时在控制输出时若⽤scanf的%s格式进⾏控制,或⽤puts进⾏控制输出的话会出现输出乱码的情况,原因是由于上述两种⽅式作输出时,会从字符数组的起始地址开始,⼀直向后输出,直到遇到结束标志’\0’为⽌,所以在上述赋值⽅式中会出错。若使⽤循环控制5次输出,每次输出单个字符,则不会出错。
也就是说程序有时⽆法获得预想的效果,不⼀定是逻辑和语法的问题,也可能是前后的控制不到位⽽出现输出的差错。
另外scanf中的%s格式遇空格或回车时结束,若有如下部分程序段:
int main()
{char a[15];
scanf("%s",a,b,c);
puts(a);
……
}
若终端输⼊为how are you,则a串只能获得how。
四、字符数组部分相关函数
字符数组部分相关字符函数简单说⼀下:
1、strlen(str1):返回值为字符串的实际长度,这个实际长度是不包含’\0’的,区别于sizeof,其测量的为字符数组在内在中实际所占的字节数。
2、 strcat(str1,str2):连接两个字符串,实现过程:str1的’\0’取消,str2连接进去,后加⼀个’\0’作为结束标志。
3、 strcpy(str1,str2):将str2拷贝到str1中去,前提条件str1必须⾜够⼤,拷贝时将’\0’⼀同拷贝,在此强调,字符串的赋值不能采⽤普通变量式,即str2 = str1写法是错误的,必须使⽤函数进⾏两个字符串的拷贝。
4、 strcmp(str1,str2):将str1与str2中的字符进⾏逐个⽐较,直到碰到不同的字符或’\0’为⽌,哪个的ANSII码值⼤就判断为哪个字符串较⼤,返回值为正值负值和0来表⽰两个串的⼤⼩关系,即若对两个字符串需要进⾏判断时 if(str > str)写法是错误的。
另外需要注意的是:上述函数的代码实现的考察也是在进⾏⼀些技术⾯试时常会遇到的问题。
考察以下⼏点:字符串要以’\0’作为结尾;对数组越界把握的敏感程度;对项⽬整体的控制细节如参数的传递,形参的设置及返回值的设置。
看⼀个例题,有⼀定的代表性,题⽬本⾝并不难,但如果字符相关内容不太熟悉或对标志性变量不熟悉,可以以此例为着⼿点。
从终端输⼊⼀⾏字符,统计其中单词个数。(该问题主要练习标志性变量的使⽤,另外如果该问题⽤单
个字符来进⾏实现也可以,但会⾛⼀些弯路,算法及实现上并不简便,所以我们在这⾥⽤字符串来进⾏解决),⽰例代码如下:
printf怎么输出字符int main()
{        char string[80];
int i,num = 0 ,word = 0;        //num为计数变量,word为标志性变量
char c;
gets(string);        //从终端输⼊字符串
for(i = 0 ; (c = string[i]) != '\0' ; i++)        //依次遍历串中的每个字符,直到'\0'为⽌
{      if(c == ' ')        //若当前遍历的字符为空格
word = 0;        //标志变量清0
else
if(word == 0)        //当前字符不为空格且若标志变量为0则表⽰前⾯遍历完⼀个单词,则计数+1,标志变量置1
{      word = 1;
num ++;
}
}
printf("The total is %d\n",num);
return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。