学习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() 。
在学习过程中,自己要先把知识点掌握住;然后自己多上机操作,才能达到学习的效果。
相关文章推荐
- C语言学习历程——字符串训练04
- C语言学习笔记(1)——数组和字符串
- C语言学习-1 字符串处理
- 学习_c语言中对字符串的操作
- 网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记
- 十进制与字符串的转换,正向和逆向互转-C语言学习笔记2
- 【C语言】学习笔记:字符串与字符数组
- 【黑马程序员】C语言学习笔记之字符串(十)
- C语言学习之字符串、字符和字节第二讲
- 黑马程序员——C语言学习之数组——字符串——指针
- C语言学习笔记(六)字符串
- C语言初始化字符串 学习
- C语言学习笔记:19_数组-字符数组与字符串(常用字符串函数)
- C语言再学习 -- 字符串和字符串函数
- 小蚂蚁学习C语言(36)——题目——字符串的倒置
- 【C语言学习笔记】字符串拼接的3种方法
- 【学习笔记】【C语言】字符串数组
- OC学习笔记之C语言字符串处理(非指针版)
- C语言字符串学习总结
- iOS开发学习笔记 2-7 C语言部分 字符串