5.5 字符数组和字符

v1

1.掌握字符数组的用法

      字符数组是元素的数据类型为字符类型的数组

              char c[10],ch[3][4];

        字符数组的初始化

                逐个字符赋值

                用字符串常量

‘a’,     " abc"  相当于'a','b','c','d' '\0'

char arr[]={'a','b','c'};这二者区别在哪呢?

char arr2[6]={'a','b','c'};

求每个数组中有几个元素,输出该数组中的元素。

arr1与arr2的地址空间可能是连续的,验证

验证了地址连续这件事情,且打印arr1时后面的一起打印出来了

v2  字符数组和字符串

二维数组初始化

二维数组存放(存储一系列的字符串)

求所用行数sizeof(fruit)/sizeof([0])//即求数组总空间/一行占的总空间

以及求列数一行总空间/任意元素所占空间

输出二维数组,先求出行列,之后再遍历输出

v3 字符数组和字符

 如果是定义的话,输出welcome没有问题,如果是键盘输入,输出就会乱码,因为是逆序输出数组里的字符,从最后一个字符开始输出,但是键盘输入的字符串可能没有数组的长度那么长。

由于上面代码里是n=sizeof(arr)/sizeof(char),求出数组的元素个数

我们对于键盘输入的字符串获取长度,使用strlen函数,之前还要加一个头文件

#include <string.h>,因为strlen函数包含在这个库文件里头。

上面那个是逆序输出且只用了一个变量下标,用来递减

也可以使用两个下标,一个i,一个j,之后一个指向第一个字母,与最后一个字母交换,之后递增,一个指向最后一个字母,之后递减,如果二者相遇,则停止交换

v4 字符串函数之strlen函数

     

strlen函数,他是计算字符串长度,但不含\0。

第一个由于第二个字符就是\0,所以长度为1

v5 字符串拷贝函数strcpy

拷贝函数(str)的源码:

两个字符串相比较时,前面一样,短的ASCII值小

当strcpy 函数变成 strncpy函数时

strcpy (字符数组1,字符串2) 

将字符串2拷贝到字符数组1中去

字符数组1中就被字符串2 给填满了

但是strncpy函数中这个拷贝的长度是有限制的,就是n

以下面这个代码为例,将src这个字符串中内容拷贝到dest字符数组中,且长度为4

strncpy函数

src[]='makeru'

dest[]='com.cn'

strncpy(dest,src,4)

dest[]='make.cn'

strncat函数

src[]='makeru'

dest[]='com.cn'

strncat(dest,src,4)

dest[]='com.cnmake'

strncmp函数(比较的时候比较前几个字母)

#include <stdio.h>
#include <string.h>

#define  N 30

int main(int argc,char *argv[])
{
    char s1[]='quit';
    char s2[]='quit\n';
    printf("%d\n",strcmp(s1,s2));
    return  0;

}

运行结果是-1

#include <stdio.h>
#include <string.h>

#define  N 30

int main(int argc,char *argv[])
{
    char s1[]='quit';
    char s2[]='quit\n';
    printf("%d\n",strncmp(s1,s2,4));
    return  0;

}

运行结果是0,因为只比较前四个字母,所以结果为0

strchr函数用法

strchr函数的使用方法,主要有以下两种:第一种是用它来查询字符串中是否存在某个字符,如果有,返回字符的地址,如果没有,返回NULL。

两个地址相减,则返回的是出现那个要寻找字符的下标

c语言中strstr函数的用法是什么?

c语言中“strstr(str1,str2)”函数用于判断字符串“str2”是否是“str1”的子串;如果是,则该函数返回“str2”在“str1”中首次出现的地址;否则返回NULL。

v12

检查输入的是大写,还是小写,还是数字

#include <stdio.h>
#include <ctype.h>

int main(int agrc,char *argv[])
{

     int ch;
  while((ch=getchar())!=EOF){
   if(isalpha(ch)) {
  
        if(isupper(ch))
            printf("Upper:%c\n",ch);
        if(islower(ch))
            printf("Lower:%c\n",ch);
               
               }
        if(isdigit(ch))
            printf("Digit:%d\n",ch-'\0');
        putchar(ch);

         }  

      return 0;

}

字母的大小写转换,代码

#include <stdio.h>
#include <ctype.h>

int main(int agrc,char *argv[])
{

     int ch;
  while((ch=getchar())!=EOF){
   if(isalpha(ch)) {
  
        if(isupper(ch))
           ch=tolower(ch);}
      else{
           ch=toupper(ch);
          }
         printf("%c\n",ch);
       }
    }

      return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值