学习C语言的字符串

  
       重点学习字符串存储的特殊性,理解字符数组和字符串的区别。掌握字符串的3个方面的特殊性:初始化,输入输出,结束字符。掌握常用字符串内置函数的用法,另外还要掌握字符指针的特殊性以及字符数组的用法。
       首先我们先来学习字符串常量,字符串常量是双引号括起的任意字符序列。字符串需要一个特殊的表示字符串结束的字符“/0 ”,该字符是ASCII码值为0的字符,称为空字符。字符串常量中可以包含转义序列。
字符数组与字符串
Ø         在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串
Ø         字符数组和字符串的区别是:字符串的末尾有一个空字符 ‘/0’
字符串可按如下方式声明并初始化:
char name[15]={ 'W', 'a', 'n', 'g', 'L', 'i', '/0'};//系统将自动加入一个空字符
char name[15] = "WangLi";
       char password[] = "12345678";/*省略数组大小,系统自动计算,大小为后面的字符总数加1,最后一个元素存入一个空字符。*/
字符串I/0 函数
       我们知道使用scanf语句的不足是接受的字符串中不能包含空格。
示例:
#include  < stdio.h >
void  main()
{
       
char s1[15];
       
char s2[] = {‘A’,’u’,’d’,’r’,’e’,’y’,’0’};
       
char s3[] = “Michael holding”;
       
int cnt = 0;
       printf(“ 请向数组中输入一个姓名:”);
       scanf(“
%s”,s1);   
       printf(“ 显示字符串 ”);
       printf(“第一个字符串是:”);
       
while(s1[cnt] != ‘0’)
       
{
              printf(“
%c”,s1[cnt]);
              cnt 
++;
       }

       printf(“ 第二个字符串是:”);
       printf(“
%s”,s2);
printf(“ 第三个字符串是:”);
       printf(“
%s”,s3);
}

 
使用gets()函数可以克服scanf()函数的局限性。Gets()函数只有在按下回车键后才会终止,这意味着gets()函数可以接收空格和制表符。由于gets()和puts()是无格式的输入输出函数的一部分,建议用fflush(stdin)函数清空缓冲区。
示例:
#include  < stdio.h >
void  main()
{
       
char name[30];
       
char address[30];
       puts(“请输入您的姓名:”);
       gets(name);
//使用 gets函数允许输入空格
       fflush(stdin);//清空缓存区
       puts(“请输入您的地址:”);
       gets(address);
       fflush(stdin);
       printf(“ 您的姓名和地址是: ”);
       puts(name);
//从键盘上读入一个完整的行,存入字符数组name。并用空字符'
注:对于字符串的输出,当需要一定的格式输出时,建议使用
printf() 函数。
printf("/n 雇员姓名是: ");
puts(name);
printf("/n 雇员所属部门是: ");
puts(dept);
printf("/n 雇员姓名是 %s",name);
printf("/n 雇员所属部门是 %s/n",dept);
puts 函数完全可以由 printf 函数取代。 当需要按一定格式输出时,通常使用 printf 函数。
字符串处理函数
Ø         与字符串有关的内置函数在头文件string.h中定义
Ø         要使用标准库字符串处理函数,程序前应该包含:#include <string.h>
其中常用的是:求字符串长度的函数(strlen)、字符串拷贝函数(strcpy)、字符串比较函数(strcmp)、字符串连接函数(strcat)。
示例1:
#include  < stdio.h >
#include 
< string .h >
void  main()
{
       
char arr[] = "Beijing";
       
int len1, len2;
       len1 
= strlen(arr);
       len2 
= strlen("Shanghai");
       printf(
"  string = %s length = %d", arr, len1);
       printf(
"  string = %s length = %d  ","Shanghai",len2);
}

输出:
string = Beijing length = 7
 string = Shanghai length = 8
 
示例2:
#include  < stdio.h >
#include 
< string .h >
void  main()
{
       
char source[] = "Do you love me?";
       
char target[20];
       strcpy(target,source);
       printf(
"  源字符串 = %s", source);
       printf (
"  目标字符串 = %s ", target);
}

输出:
源字符串 = Do you love me?
 目标字符串 = Do you love me?
示例3:
#include  < stdio.h >
#include 
< string .h >
void  main()
{
       
char username[15],pwd[15];
       printf(
"  请输入用户名: " );
       gets(username);
       printf(
"  请输入密码: ");
       gets(pwd);
       
if((strcmp(username,"John")==0&&
                                 (strcmp(pwd,
"123456")==0))
              printf(
"  您已成功登录   ");
       
else
              printf(
"  用户名和/或密码无效   "); 
}

示例4:
#include < stdio.h >
#include
<string.h>
void  main()
{
       
char source_string[] = "Love me!";
       
char target_string[30= "MMS";
       strcat(target_string,source_string);
       printf(
"  源字符串 = %s", source_string);
       printf(
"  目标字符串 = %s ", target_string);
}

输出:
源字符串 = Love me
 目标字符串 = MMS Love me
指向字符串的指针
Ø         在C语言中,可以将字符指针指向字符串
Ø         被指向的字符串可以是一个常量字符串,也可以是一个存储着字符串的字符数组
我们知道字符串本质上是字符数组,所以指向字符串的指针实际上就是指向字符数组的指针。
我们用字符数组保存一个人的姓名:如
Char name[5] = “Mike”;
在学习了指针以后,我们可以用字符串指针来表达一个人的姓名:如
Char *pname = “Mike”;
此时,由系统自动为pname分配5个字符的位置,并初始化为“Mike”。最后一个位置仍然是空字符’/0’。
示例:
#include  < stdio.h >
void  main()
{
char *ps="Do you love me?";
int n=10;
ps
=ps+n;
printf(
"%s ",ps);
}

输出:
lives
字符指针数组
字符指针数组:一个数组中的各个元素都是字符指针
char *names [] = {"Apple", "Pear", "Peach", "Banana"};
示例:
void  main()
{
       
char *names[] = "Apple"
                       
"Banana",
                         
"Pineapple",
                                      
"Peach",
                                      
"Strawberry",
                             
"Grapes" }
;
      
char *temp;//声明了一个字符指针变量
      printf(“  %%s",names[2],names[3]);
      temp = names[2];
      names[
2= names[3];
      names[
3= temp;
      printf(
"  %s %s",names[2],names[3]);
      printf(
" ");
}

输出:
Pineapple Peach
Peach Pineapple
字符串作为函数参数
用户定义版字符串拷贝函数
void  mystrcpy( char  dest[ ],  char  src[ ])
{
       
int i = 0;
       
while(src[i] != '
用户定义版求字符串长度函数
int  mystrlen ( char   * s) 
{
         
int n = 0;
         
while (*!= '
string.h 中定义了很多字符串处理函数函数 比较常用的有 strcpy() strcat() strcmp() strlen()
在学习过程中,自己要先把知识点掌握住;然后自己多上机操作,才能达到学习的效果。
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值