字符型数据以及字符串的输⼊与输出和函数
空⽩符:空格,回车,制表符等等。
1、字符型数据(单个数据的输⼊)。
(1)scanf输⼊,遇到回车,空格,tab键会记录进去,使得⼀个字符的内容变为空格这类的字符,
eg:输⼊格式:5
M
解决⽅法:
(1)getchar();处理⼀个字符。%*c赋值抑制符,跳过⼀个字符,读⼊但不存储。
scanf("%d",&n);
getchar();
scanf("%c",&M);
(2)跳过多个空⽩字符在格式传中的 %c之前加上空格或者在%d之后加上空格
scanf("%d",&n); scanf("%d ",&n);
scanf(" %c",&M); scanf("%c",&M);
2、字符数组与字符串
通常⽤⼀个字符数组来存储⼀个字符串。字符串和普通字符数组的区别在于字符串末尾有⼀个空字符'\0'. 空字符不计⼊字符串有效字符,也不计⼊总长度
字符串的循环遍历条件:s【i】!=‘\0’
字符串的输⼊与输出
所有的字符串操作针对的其实是字符数组,因为字符串是⽆法直接定义的。
char name[100];
(1)⽤%s整体输⼊/输出
scanf(“%s”,name);
printf(“%s”,name);
注意:该格式读⼊的数据中不能含有空⽩符,所有的空⽩符都会被当做数据结束的标志。
(2)gets()和puts()函数
gets(name);
遇到换⾏符或⽂件结束标志会结束读⼊。换⾏符不作为读取字符串的内容,换⾏符会被转黄伟字符串结束标志‘|0’.
puts():输出字符串并⾃动换⾏,该函数只能输出字符串。
printf():通过格式控制符%s输出字符串,不能⾃动换⾏。除了字符串,printf() 还能输出其他类型的数据。
gets和scanf的区别
1、 gets可以接收空格;⽽scanf遇到空格、回车和Tab键都会认为输⼊结束,所有它不能接收空格。
例如:如果输⼊为"hello world"时,上⾯程序的运⾏结果是"hello world"。⽽如果⽤scanf则只能输出he
llo
2、scanf对末尾回车符的处理:把回车符保留在缓存中。gets对末尾回车符的处理:接收回车,但把回车替换为\0.
3、gets的返回值为char*型,当读⼊成功时会返回输⼊的字符串指针地址,出错时返回NULL;scanf返回值为int型,返回实际成功赋值的变量个数,当遇到⽂件结尾标识时返回EOF。
4、gets函数仅⽤于读⼊字符串;scanf为格式化输出函数,可以读⼊任意C语⾔基础类型的变量值,⽽不是仅限于字符串(char*)类型。
3、常⽤字符串函数
(1)string.h头⽂件中:
strlen(),计算长度。strlen(s)返回的就是结束标记之前的字符个数。⽽s[strlen(s)]是结束标记“\0”。
字符串复制:
strcpy(字符数组1,字符串2)复制第⼆个参数中的内容到第⼀个参数,
strcpy(字符数组1,字符串2,n)复制第⼆个参数中的最多n个字符到第⼀个参数中。
字符串⽐较:
strcmp(字符串1,字符串2)⽐较⼤⼩,前者⼤返货⼀个正整数,后者⼤返回⼀个负整数,相等放回0.
strncmp(s1,s2,n)将字符串1中最多n个字符与字符串2进⾏⽐较
字符串连接:
strcat(s1,s2)第⼆个参数的内容添加到第⼀个参数的有效字符后⾯。
strcat(s1,s2,n)第⼆个参数的最多n个字符添加到第⼀个参数的有效字符后⾯。
字符串逆置:
strrev(str)
/*
* 函数名:reverseStr
* 函数功能:把字符串中的字符逆置
* 参数:需要逆置的字符串地址
*/
void reverseStr(char *str)
{
int len;
int i;
char temp;
len = strlen(str); // 获取字符串长度
/* 中间对折,两边调换 */
for (i = 0; i < len/2; i++)
{
temp = str[i];
str[i] = str[len-1-i];
str[len-1-i] = temp;
}
}
(2)stdio.h中的⽤于字符串输⼊输出的函数(ip判断中⽤得⾮常巧,字符串类型的数据可以以其他格式存储,且可以改变成整型存储。整型数据也可以再存储到字符串中)
sprintf(str,"zhang san is %d",d);
将输出结果保存在str中⽽不是输出到屏幕了。
sscanf(str,"%*6d%4d%2d%2d",&year,&month,&day);
从str字符串中读⼊数据并存储到变量中。str中存储了某⼈的⾝份证号“410621111109092108”。
⼆维字符数组的输⼊和输出:
在输⼊之前如果有整型数据的话,记住输⼊过整型数据后加⼀个getchar(),将你下⼀个输⼊的转⾏符记录⾛
eg:
while(scanf("%d%d",&n,&m),n!=0&&m!=0){
getchar();
scanf输入整型数组char str[n][LEN];//注意列长度与结果的正确性有很⼤关系,最好不要直接⽤你定义的输⼊数据,可以⽤#define⼀个
for(i=0;i<n;i++){
gets(str[i]);
}
for(i=0;i<n;i++){
puts(str[i]);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论