字符数组与字符串

字符数组与字符串

6.3.1  字符数组的逐个字符操作 
[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。 
 
main() 
    {int i; 
      static char str[80]; 
      clrscr(); 
      for(i=0;i<80;i++) 
          { str=getch();     
              printf(\"*\");     
              if(str=='\\x0d') break; 
         
      i=0; 
      while(str!='\\x0d') 
            printf(\"%c\",str[i++]);  
      printf(\"\\n\"); 
      getch();  
   
1.字符数组的定义 
1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。 
2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。 
2.字符数组的初始化 
字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。 
    3.字符数组的引用 
    字符数组的逐个字符引用,与引用数值数组元素类似。 
(1)字符数组的输入 
    除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。 
    例如: 
    char str[10];
…… 
for(i=0; i<10; i++) 
    { scanf(\"%c\", &str); 
        fflush(stdin);  
    }
…… 
(2)字符数组的输出 
    字符数组的输出,可以用putchar()或printf()函数。 
    例如: 
    char  str[10]=\"c language\"; 
…… 
for(i=0; i<10; i++)  printf(\"%c\", str); 
printf(\"\\n\"); 
…… 
    注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。 
6.3.2  字符数组的整体操作 
[案例6.6]  字符数组的整体输入与输出。 
 
 
main() 
{ int i; 
  char name[5][9]={\"张三山\", \"李四季\", \"王五魁\", \"刘六顺\", \"赵七巧\"}; 
  for(i=0;i<5;i++) 
  printf(\"\\n%s\\t\",name);       
  getch(); 
 
1.字符串及其结束标志 
所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。 
C语言规定:以‘\\0’作为字符串结束标志(‘\\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。 
注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。 
另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。 
2.字符数组的整体初始化 
字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。 
3.字符数组的整体引用 
(1)字符串的输入 
除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。 
(2)字符串的输出 
printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。 
6.3.3  常用的字符串处理函数 
字符串标准函数的原型在头文件string.h中。 
1.输入字符串──gets()函数 
(1)调用方式:gets(字符数组) 
(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。 
(3)使用说明 
1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。 
2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。 
2.输出字符串──puts()函数 
(1)调用方式:puts(字符数组) 
(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\\n’取代字符串的结束标志‘\\0’。所以用puts()函数输出字符串时,不要求另加换行符。 
( 3)使用说明 
1)字符串中允许包含转义字符,输出时产生一个控制操作。 
2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。 
3.字符串比较──strcmp()函数 
(1)调用方式:strcmp(字符串1 ,字符串2) 
其中“字符串”可以是串常量,也可以是1维字符数组。 
(2)函数功能:比较两个字符串的大小。 
如果:字符串1=字符串2,函数返回值等于0; 
            字符串1<字符串2,函数返回值负整数; 
            字符串1>字符串2,函数返回值正整数。 
(3)使用说明 
1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。 
2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。 
[案例6.7]  gets函数和strcmp函数的应用。 
 
 
#include  \"stdio.h\" 
main() 
  {char pass_str[80];                     
    int i=0; 
       
    while(1) 
        {clrscr(); 
          printf(\"请输入密码\\n\");       
          gets(pass_str);    
if(strcmp(pass_str,“password”)!=0)   
          printf(\"口令错误,按任意键继续\"); 
    else 
          break;                 
    getch(); 
    i++; 
    if(i==3) exit(0);     
 
   

4.拷贝字符串──strcpy()函数 
(1)调用方式:strcpy(字符数组, 字符串) 
其中“字符串”可以是串常量,也可以是字符数组。 
(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。 
(3)使用说明 
1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\\0'一起复制。 
2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。 
5.连接字符串──strcat()函数 
(1)调用方式:strcat(字符数组, 字符串) 
(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。 
(3)使用说明 
  1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。 
  2)连接前两个字符串都有结束标志'\\0',连接后“字符数组”中存储的字符串的结束标志'\\0'被舍弃,只在目标串的最后保留一个'\\0'。 
6.求字符串长度──strlen()函数(len是length的缩写) 
(1)调用方式:strlen(字符串) 
(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。 
7.将字符串中大写字母转换成小写──strlwr()函数 
(1)调用方式:strlwr(字符串) 
(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。 
8.将字符串中小写字母转换成大写──strupr()函数 
(1)调用方式:strupr(字符串) 
(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值