您的位置:首页 > 编程语言 > C语言/C++

学习C语言的字符串

2006-10-08 17:02 225 查看
  
       重点学习字符串存储的特殊性,理解字符数组和字符串的区别。掌握字符串的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 %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 (*s != '

string.h 中定义了很多字符串处理函数函数比较常用的有strcpy()strcat()strcmp() strlen()
在学习过程中,自己要先把知识点掌握住;然后自己多上机操作,才能达到学习的效果。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: