Android 音视频入门之C入门序列(七)- 字符串相关

定义字符串的二种方式

  • 方式一
char str[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 加上'\0'的作用是打印有个结尾
  • 方式二
char *str2 = "Hello"; // 这名话会隐式加了\0, 所以这个不需要在后面加\0

上面二种方式在使用上也是有区别

// 方式一
char str[] = {'H', 'e', 'l', 'l', 'o', '\0'};
// 方式二
char *str2 = "Hello";

// 方式一可以执行修改操作 如下
str[2] = 'z'; //  这样是没问题的
// 方式二如果执行方式一会出现崩溃如下代码
str2[2]  = 'z'; // 不能这样做
// 原因,方式一是因为生成的字符串Hello是在静态区,但是创建str的时候它是将Hello拷贝过来,操作的是一个副本,所以没影响 
// 方式二则不同,方式二是直接将str2的地址指向的静态区的Hello,而静态区的数据是不能修改的,所以系统会拒绝访问而出现异常。
 

获取字符串长度

  • 方式一
int getLen1(char *string) {
    int count = 0;
    while (*string) { // *string !='\0' 判断的是\0而不是0  就是一直遍历下去  *string取string的值
        string++; // 指针挪动
        count++;
    }
    return count;
}


char string[] = {'a', 'b', 'c', 'd', 'e', 'f', '0', '\0'};
int len = getLen1(string);
  • 方式二
char string2[] = {'a', 'b', 'c', 'd', 'e', 'f', '0', '\0'};
int len2 = sizeof string2 / sizeof(char);


字符串转换

char *num = "1";
// 将num转为int类型
int c_int = atoi(num);

字符串比较

char * test1 = "Lucy";
char * test2 = "lucy";
// 使用系统API
int result_2 = strcmp(test1, test2); // 它是区分大小写
// result_2如果返回0 则代表相等,

int result_3 = strcmpi(test1, test2); // 它是不区分大小写

字符串查找及获取位置

char *text = "name-is-Lucy";
char * subtext = 'i';
char * pop = strstr(text, subtext);
if (pop) { // 非null 就查找到了
    printf("查找到了,pop的值是:%s\n", pop); // 会把找到的后面一截全部打印出来  查找到了,pop的值是:is-Lucy
}

// 获取位置
int index = pop - text; // pop =  is-Lucy,  text = name-is-Lucy 直接指针减法就可以

字符串拼接

// 字符串拼接得定义一个容器
char destination[25];// 25容器大小 这个是写死的。
// 定义几个字符串
char *blank = "--到--", *CPP = "C++", *Java = "java";
// 使用api strcpy
strcpy(destination, CPP);//先copy到数组里,
strcat(destination, blank); // 然后再拼接
strcat(destination, Java); // 然后再拼接
printf("拼接后的结果: %s\n", destination);

大小写转换

void lower(char *dest, char *name) {
    printf("name: %p\n", &name);
    char *temp = name;
    while (*temp) {
        *dest = tolower(*temp);
        temp++; // 挪动指针
        dest++;// 存储的也要挪动,目是的挪动一个储存一个
    }
    *dest = '\0'; // 避免打印系统值
    printf("name: %p\n", &name);
}

char *name = "Hello World";
// 先定义结果
char dest[20];
lower(dest, name);
printf("小写转换后的结果是: %s\n", dest);
printf("name: %p\n", &name);

字符串的截取

void subString(char *result, char *str, int start, int end) {
    char *temp = str + start;
    int i = start;
    for (; i < end; i++) {
        *result = *(temp+i);
        result++;
    }
    *result = '\0';
}

char *string = "My-name-is-Hanmeimei";
char *result[30];
subString(result, string, 2, 6); // 截取第二到第六个字符
printf("截取后的值为: %s\n", result);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值