字符串和字符串函数之学习笔记(三)

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表示 
//字符串的空字符别忘了 

先写到这,等会见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值