C语言字符串的处理

字符串的处理:
1、C程序员定义字符串的方式有三种:

1) 字符串字面值:”abc”
2) 字符数组:char buf[50];
3) 字符指针:char *str;

2、数组可以看成常指针(不可以改变地址,只能初始化)。某些时候和指针有区别(比如使用sizeof的时候)。
3、memset函数可以清理字符数组,包括变长数组。

4、实例:

/*
   字符串的处理
 */

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

int main(void)
{
    /* (1) 赋值 */
    //字符串赋值,赋值改变的是地址,而strcpy改变的是值
    char* s1 = "abc";
    char s2[10] = "abc";
    s1 = "abc";          //正确,地值可以修改
    //strcpy(s1,"123");  //错误,修改只读区
    //s2 = "123";        //错误,数组是一个常指针,不可以改变地址
    strcpy(s2,"123");    //正确,值可以修改

    char* s3 = (char *)malloc(10);
    strcpy(s3,"abc");
    //s3 = "123";        //错误,改变了地址,使其指向只读区,free会失败
    printf("%s\n",s3);
    free(s3);


    /* (2) 字符串的长度,字符串的长度strlen(),buf的大小sizeof */
    char buf[50] = "abc";
    printf("strlen(buf) = %d, sizeof(buf) = %d\n",strlen(buf),sizeof(buf));

    /* (3) 字符串的比较,==比的是地址,strcmp比的是值 */
    char* s4 = "abc";
    char* s5 = "abc";
    printf("%d\n",s4==s5);           //比较的是一个地址,而不是字面值
    printf("%d\n",strcmp(s4,s5));    //比较的是字面值,而不是地址

    char s6[10] = "abc";
    char s7[10] = "abc";
    printf("%d\n",s6==s7);
    printf("%d\n",strcmp(s6,s7));

    /* (4) 用指针操作字符串 */
    char* s8 = "zhangfei,zhang123";
    int len = strlen(s8);
    char name[len];
    char passwd[len];

    //清空姓名和密码的缓冲区
    memset(name,0,len);
    memset(passwd,0,len);

    int i = 0, flag = 0, pos = 0;
    for(i = 0; i < len; i++)
    {
        if(*(s8 + i) == ',') 
        {
            flag = 1;
            pos = i;
            continue;
        }
        if(!flag) 
        {
            name[i] = *(s8 + i);
        }
        else 
        {
            passwd[i-pos-1] = *(s8 + i);
        }
    }
    printf("name:%s, passwd:%s\n",name,passwd);

    /* (5)字符串的拼接 */
    char fpath[50] = "/home/andy/C++/day026";
    char fname[50] = "stf.txt";
    char pname[100] = {};

    /*方法一
    strcpy(pname,fpath);
    strcat(pname,"/");
    strcat(pname,fname);
    printf("pname:%s\n",pname);
    */
    //方法二
    sprintf(pname,"%s/%s",fpath,fname);
    printf("pname:%s\n",pname);

    /* (6) 字符串和其他类型的转换 */
    //其他类型转换成字符串
    int x = 100;
    char bufx[10] = {};
    sprintf(bufx,"%d",x);
    printf("bufx = %s\n",bufx);

    //字符串转换成其他类型
    int y = 0;
    sscanf(bufx,"%d",&y);
    printf("y = %d\n",y);

    /* 总结:处理字符串大部分使用字符串处理函数更好,只有少部分例外 */
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值