4.字符串的输入
1).在输入之前不要忘记先预留空间
2).scanf()和转换说明%s,都只能读一个单词(即以第一个非空白字符作为字符串的开始,以下一个空白字符作为结束
(如果指定字段宽度,那就看这两个条件谁先满足)单词超过指定字段宽度,再次读取,会接着读那个单词。。
scanf()会返回一个整数值,即成功读取的项数或EOF(读至结尾时)
3).gets()直至遇到换行符,才会停止并且丢掉换行符,把其余字符储存下来,加一个空字符(所以,这个函数根本不知道读 取的有没有溢出)不过puts()还是蛮棒的
4).fgets()…fputs()。。。举个栗子
#include <stdio.h>
#define STLEN 14
int main ()
{
char words[STLEN];
fgets(words,STLEN,stdin);
fputs(words,stdout);
return 0;
}
先说fgets():第二个参数表明,输入字符的最大个数是13,因为,空字符占一个位置
或者读到换行符,就停了,但是会把换行符留下
第三个参数的话就是读入从键盘的输入
fgets():二者很像,第二个参数表示显示在计算机显示器上
因为gets()不要换行符,所以puts()自动加
fgets()会留下换行符,所以fputs()不加
顺利的话,fputs()返回指向char的指针,但是如果函数读到文件结尾或读入过程中出现错误,它将返回空指针
#include <stdio.h>
#define STLEN 10
int main ()
{
char word[STLEN];
while(fgets(word,STLEN,stdin)!=NULL&&word[0]!='\n')
fputs(word,stdout);
return 0;
}
虽然有STLEN的限制,但是,在ENTER键之前,都在缓冲区储存着,按下ENTER键,既增加了一个换行符,又将缓冲区的东东都给了fgets()函数。通过循环的一遍又一遍,fgets()函数会一点一点地读(每一句都有’\0’),而且一句一句地交给fputs()打印,但是最后一句在’\0’后还有一个’\n’。打印好的东西会放在另一块缓冲区,等着最后那个换行符的出现,缓冲区的内容被发送至显示器上。
5.字符串的输出
puts()函数开始就是以指针的形式,找到空字符,就停了。会在末尾自动加换行符。
fputs()格式的话呢,上面有栗子,不会在末尾自动加换行符
printf()更加多才多艺
while(*string)
当string指向空字符时,*string的值为0,循环结束
6.字符串函数
一般呢,字符串函数都在都在<string.h>头文件里,简单说下一些函数的用法
strlen():用于统计字符串长度(不含空字符)
#include <stdio.h>
#include <string.h>
int main()
{
char stp[]="hello,thank you";
int n=strlen(stp);
printf("%d\n",n);
//不借助函数的方法
int i=0;
while(stp[i]!='\0')
{
i++;
}
printf("%d",i);
return 0;
}
strcat():用于拼接字符串,即:两个字符作为参数,把第二个字符串的备份附加在第一个字符串末尾,拼接后的字符串为第一个字符串,第二个不变,且该函数返回第一个参数。
strncat():和上面那个函数很像有木有~~但是这个函数需要3个参数(最后一个参数是在第一个参数后添加字符串的长度限制)
eg:
strncat(w,y,13) //表示,如果y的长度大于13,拼接时只要y的前13个字符再加一个空字符
#include <stdio.h>
#include <string.h>
int main()
{
char st1[]="hello,thank you ";
char st2[]="thank you very much";
int size=15;
//strncat(st1,st2,size);
//puts(st1);
//puts(st2);
//不用函数的方法
int n=strlen(st1);
char st3[100]; //新建个数组很方便
int i=0;
for(;i<n;i++)
st3[i]=st1[i];
int j=0;
for(;j<size;j++)
st3[n+j]=st2[j];
st3[n+size]='\0';
puts(st3);
puts(st2);
return 0;
}
//能用n、size,就不要用i或者j表示
//字符串的空字符别忘了
先写到这,等会见