8.字符数组和字符串

8.1字符数组

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

char  ch[10];

字符数组的初始化

char ch[6]={'H','e','l','l','o'};

char ch[6]={"hello"};

char ch[6]="hello";

char ch[]="hello";

#include<stdio.h>
#include<stdlib.h>

int main()
{

    char ch1[6]="abc",ch2[]={'d','e','f','\0'};

    printf("%s \n",ch1);
    printf("%s \n",ch2);



    return 0;
}
8.2字符串数组

字符串数组两种定义方式:

1.二维字符数组(固定长度)

char ch [3][10] = {"beijing","chengdu","mianyang"};

特点:

        ·内存连续分配,每个字符串长度固定(可能浪费空间)

        ·可以直接修改内容(如:ch[0][0] = 'B';)

2.字符指针数组(动态长度)

char *p[]={"beijing","chengdu","mianyang"};

特点:

        ·指针指向字符串字面量(存储在只读内存,不可修改)

        ·灵活支持不同长度字符串,节省内存

C语言中没有字符串常量,用字符数组处理字符串,字符数组结束标识:‘\0’

例如:

#include<stdio.h>
#include<stdlib.h>

int main()
{

    char ch[][8] = {"apple","grape","pear","orange"};

    int i,n;

    n = sizeof(ch)/sizeof(ch[0]);

    for(i=0;i<n;i++)
    {
       printf("%s \n",ch[i]);

    }

    return 0;
}

输入一个字符串,将字符串逆序输出:

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

#define N 20
int main()
{

    char str[N]={0};
    int n,i;

    printf("please input str:");

    gets(str);

    n = strlen(str);

    for(i=n-1;i>=0;i--)
    {
        putchar(str[i]);
    }

    return 0;
}

或者:

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

#define N 20
int main()
{

    char str[N]={0};
    int n,i,j,t;

    printf("please input str:");

    gets(str);

    n = strlen(str);
    t = 0;
    i = 0;
    j = n-1;

    while(i<j)
    {
        t = str[j];
        str[j] = str[i];
        str[i] = t;

        i++;
        j--;

    }

    puts(str);


    return 0;
}
8.3字符串函数

C语言库中实现了很多字符串处理的函数

#include<string.h>

8.3.1strlen

字符串长度函数strlen

·格式:strlen(字符数组)

·功能:计算字符串长度

·返回值:返回字符串实际长度,不包括‘\0’在内

     \xhh 表示十六进制数代表的符号

     \ddd 表示八进制的

例如:

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


int main()
{
    char a[7] = {'a','b','\0','d','\0'};

    printf("%d %d\n",sizeof(a),strlen(a));


    return 0;
}
8.3.2strcpy

字符串拷贝函数strcpy

·格式:strcpy(字符串1,字符串2);

·功能:将字符串2拷贝到字符串1中

·返回值:返回字符数组1的首地址

·说明:

          1.字符数组1必须足够大

          2.拷贝时‘\0’一同拷贝

例如:

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

#define N 20


int main()
{

    char s2[] = "hello";
    char s1[N];

    strcpy(s1,s2);

    puts(s1);
    puts(s2);

    return 0;
}
8.3.3strcat

字符串连接函数strcat

·格式:strcat(字符数组1,字符数组2)

·功能:把字符数组2连接到字符数组1的后面

·返回值:返回字符数组1的首地址

·说明:

        1.字符数组1必须足够大

        2.连接前,两串均以‘\0’结束,连接后,串1的‘\0’取消,新串最后加‘\0’

举例:

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

#define N 20


int main()
{

    char s2[] = "hello";
    char s1[N] = "grill";

    strcat(s1,s2);

    puts(s1);
    puts(s2);

    return 0;
}
8.3.4strcmp

字符串比较函数strcmp

·格式:strcmp(字符串1,字符串2)

·功能:比较两个字符串

·比较规则:将两串字符串从左向右逐个字符比较(ASCII),直到遇到不同字符或‘\0’为止

·返回值:返回int型整数

1.若字符串1<字符串2,返回负整数

2.若字符串1>字符串2,返回正整数

3.若字符串1=字符串2,返回零

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

#define N 20


int main()
{

    char s2[] = "hello";
    char s1[N] = "grill";

    printf("%d \n",strcmp(s1,s2));

    return 0;
}
8.3.5字符串扩展用法

·strncpy(p,p1,n),复制指定长度字符串

·strncat(p,p1,n),附加指定长度字符串

·strcasecm,忽陷大小写比较字符串

·strncmp(p,p1,n),比较指定长度字符串

·strchr(p,c),在字符串中查找指定字符

· strstr(p,p1)查找字符串
1. isalpha()检查是否为字母字符
2. isupper()检查是否为大写字母字符
3. islower()检查是否为小写字母字符
4.isdigit()检查是否为数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值