C语言----字符串

字符串

第一种定义

利用字符数组 +双引号的方式定义字符串

char str1[4]="abc";

printf("%s\n",str1);

细节1:

在底层,实际存储的时候,c语言还是会帮我们把字符串"abc"转换成字符数组进行保存,并且在末尾还要再加上'\0‘

{'a','b','c','\0'};

细节2:

数组的长度,要么不写,如果要写的话,记得要把结束标记的空间给预留出来

细节3:

字符数组 +双引号的方式定义字符串,内容是可以发生改变的

第二种定义

利用指针 +双引号的方式定义字符串

char* str2 = "abc";

printf("%s\n",str2);

细节1:

在底层,实际存储的时候,c语言还是会帮我们把字符串"abcd"转换成字符数组进行保存,并且在末尾还要再加上'\0'

{'a','b','c','d','\0‘};

细节2:

利用指针 +双引号的方式定义字符串,会把底层的字符数组放在只读常量区

只读常量区特点:

内容不可以修改的

里面定义的字符串是可以复用的

复用就是在定义时会查找在只读常量区内有没有这个字符串,若有则复用

键盘录入字符串并遍历

#include<stdio.h>
int main()
{
    //因为要键盘录入键盘录入,所以不可以用指针定义字符串
    char str[100];
    //定义一个指针p来接收str的地址
    char* p = str;
    printf("请输入一段字符串(长度小于100):");
    scanf("%s",str);
    printf("录入的字符串为:%s\n",str); 
    //循环判断str内的每一个字符
    while(1)
    {
        //定义变量c来接收p中的元素
        //数组的地址其实就是数组中第一个元素的地址
        char c = *p;
        //当c等于结束符时说明字符串已经遍历完成
        if(c == '\0')
        {
            //跳出循环
            break;
        }
        //打印当前元素
        printf("%c\n",c);
        //指针 p 向后移动一个位置,指向下一个字符
        p++;
    }
    return 0;
}
​

遍历姓名

#include<stdio.h>
int main()
{
    //方法一:定义一个二维数组来存放5人的名字
    /*char strArr[5][10] = {"张三","李四","王五","马六","徐七"};
    int i;
    for(i=0;i<5;i++)
    {
        printf("%s\n",strArr[i]);   
    }*/
    //方法二:定义一个指针数组来存放5人的名字
    char* p[5] = {"张三","李四","王五","马六","徐七"};
    int i;
    for(i=0;i<5;i++)
    {
        printf("%s\n",p[i]);    
    }
    return 0;
}

string常用函数

使用函数需要导入头文件

#include<string.h>

  1. strlen:获取字符串的长度

    统计长度时不计算结束符,且中文占2字节

  2. strcat:拼接两个字符串

    细节1:把第二个字符串中全部的内容,拷贝到第一个字符串的未尾,第二个字符串不修改 前提1:第一个字符串是可以被修政的 前提2:第一个字符串中剩余的空间可以容纳拼接的字符串

  3. strcpy:复制字符串

    细节1:把第二个字符串中全部的内容,拷贝到第一个字符串中,把第一个字符串里面原有的内容给覆盖了 前提1:第一个字符串是可以被修改的 前提2:第一个字符串中空间可以容纳第二个字符串的完整内容

  4. strcmp:比较两个字符串

    顺序内容完全 一样返回0,不一样返回非0

  5. strlwr:将字符串变成小写

    只可以修改英文大小写

  6. strupr:将字符串变成大写

    只可以修改英文大小写

示例代码
#include<stdio.h>
#include<string.h>
int main()
{
    
    char* str1 = "abc";
    char str2[100] = "Ab你";
    char str3[] = {'e','f','g','h','\0'};
​
    strlen计算字符串长度
    //int len1 = strlen(str1);
    //int len2 = strlen(str2);
    //int len3 = strlen(str3);
    //printf("%d  %d  %d\n",len1,len2,len3);
​
    strcat拼接字符串
    //strcat(str2,str3);
    //printf("%s\n",str2);
    //printf("%s\n",str3);
​
    strcpy复制字符串
    //strcpy(str2,str3);
    //printf("%s\n",str2);
    //printf("%s\n",str3);
​
    strcmp比较字符串
    //int test = strcmp(str2,str3);
    //printf("%d\n",test);
​
    strlwr小写字符串
    //strlwr(str2);
    //printf("%s\n",str2);
​
    //strupr大写字符串
    strupr(str2);
    printf("%s\n",str2);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值