学习C语言的字符串

本文详细阐述了C语言中字符串存储的特殊性,包括字符数组与字符串的区别、初始化、输入输出、结束字符等。通过实例演示了如何使用字符串常量、字符数组、字符串输入输出函数(如scanf、gets)以及字符串处理函数(如strlen、strcpy、strcmp、strcat)。此外,文章还介绍了字符指针的特殊性以及如何用字符指针表示字符串,最后提供了用户定义版的字符串拷贝函数和求字符串长度函数。内容丰富实用,旨在帮助读者全面掌握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() 。
在学习过程中,自己要先把知识点掌握住;然后自己多上机操作,才能达到学习的效果。
 
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值