栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言学习笔记——(四)指针进阶——字符串操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言学习笔记——(四)指针进阶——字符串操作

注:编码工具是CLion+Cygwin64

目录

字符串的两种定义方式

自定义获取字符串长度方法

方式一:

方式二:

字符串转数字

比较

查找和包含

拷贝和拼接

大小写转换


字符串的两种定义方式

        方式一:字符数组

                此种方式需要在最后一个元素后面添加'',C语言的字符串以''结尾。

        方式二:字符指针

                此种方式隐式添加''。

#include 

int main(){
    char str[7] = {'S', 't', 'r', 'i', 'n', 'g'};
    printf("str = %sn", str);
    char str3[] = {'C', 'o', 'l', 'd', ''};
    printf("str3 = %sn", str3);
    str3[0] = 'F';
    printf("str3 = %sn", str3);

    char * str2 = "Here I Am";
    printf("str2 = %sn", str2);
//    str2[2] = 'e'; // 不能如此操作
//    printf("str2 = %sn", str2);
    
    return 0;
}

输出:

str = String
str3 = Cold
str3 = Fold
str2 = Here I Am

自定义获取字符串长度方法

方式一:
#include 

int len(char *str) {
    char *tmp = str;
    int count = 0;
    while (*tmp) {
        count++;
        tmp++;
    }
    return count;
}

int main() {
    char *str = "Better Babe";
    int length = len(str);
    printf("str's length is %dn", length);

    return 0;
}

输出:

str's length is 11

方式二:
#include 

void len(int * length, char *str) {
    char *tmp = str;
    int count = 0;
    while (*tmp) {
        count++;
        tmp++;
    }
    *length = count;
}

int main() {
    char str[] = {'H', 'e', 'r', 'e', ' ', 'I', ' ', 'A', 'm', ''};
    int length;
    len(&length, str);
    printf("str's length is %dn", length);

    return 0;
}

输出:

str's length is 9

注意:C/C++编译器中,数组作为参数传递,会把数组优化为指针。

字符串转数字
#include 
#include 
int main() {
    char * str = "99";
    char * str2 = "4.596";
    char * str3 = "16.88x";
    char * str4 = "xyz186";
    int i = atoi(str);
    int i2 = atoi(str2);
    int i3 = atoi(str3);
    int i4 = atoi(str4);
    printf("i = %d, i2 = %d, i3 = %d, i4 = %dn", i, i2, i3, i4);

    long l = atol(str);
    long l2 = atol(str2);
    long l3 = atol(str3);
    long l4 = atol(str4);
    printf("l = %ld, l2 = %ld, l3 = %ld, l4 = %ldn", l, l2, l3, l4);

    double d = atof(str);
    double d2= atof(str2);
    double d3= atof(str3);
    double d4 = atof(str4);
    printf("d = %lf, d2 = %lf, d3 = %lf, d4 = %lfn", d, d2, d3, d4);
    return 0;
}

输出:

i = 99, i2 = 4, i3 = 16, i4 = 0
l = 99, l2 = 4, l3 = 16, l4 = 0
d = 99.000000, d2 = 4.596000, d3 = 16.880000, d4 = 0.000000

比较
#include 
#include 
#include 
#include 
#include 
int main() {
    char * str = "One Day";
    char * str2 = "One Day";
    char * str3 = "one day";
    int r = strcmp(str, str2); // 区分大小写
    if(r){
        printf("str(%s)和str2(%s)不相等n", str, str2);
    }else{
        printf("str(%s)和str2(%s)相等n", str, str2);
    }
    int r2 = strcmp(str, str3); // 区分大小写
    if(r2){
        printf("str(%s)和str3(%s)不相等n", str, str3);
    }else{
        printf("str(%s)和str3(%s)相等n", str, str3);
    }
    int r3 = strcasecmp(str, str3); // 不区分大小写
    if(r3){
        printf("str(%s)和str3(%s)忽略大小写后不相等n", str, str3);
    }else{
        printf("str(%s)和str3(%s)忽略大小写后相等n", str, str3);
    }
    return 0;
}

输出:

str(One Day)和str2(One Day)相等
str(One Day)和str3(one day)不相等
str(One Day)和str3(one day)忽略大小写后相等

查找和包含

        查找到了就是包含,否则就是不包含。

#include 
#include 
int main() {
    char * str = "Do You Love Me?";
    char * substr = "L";
    char * result = strstr(str, substr);
    if(result)
    {
        printf("在'%s'中找到了'%s'n", str, substr);
        printf("result = %sn", result);
        printf("'%s'在'%s'中的位置是:%dn", substr, str, result - str);
        printf("'%s'"包含"'%s'n", str, substr);
    }else{
        printf("在'%s'没找到了'%s'n", str, substr);
        printf("'%s'"不包含"'%s'n", str, substr);
    }
    return 0;
}

输出:

在'Do You Love Me?'中找到了'L'
result = Love Me?
'L'在'Do You Love Me?'中的位置是:7
'Do You Love Me?'"包含"'L'

拷贝和拼接
#include 
#include 

int main(){
    char * result = malloc(100);

    char * to = "--到--", *cpp = "C++", *java = "Java";
    if(result){
        strcpy(result, java);
        printf("result = %sn", result);
        strcat(result, to);
        printf("result = %sn", result);
        strcat(result, cpp);
        printf("result = %sn", result);

        free(result);
        result = NULL;
    }
    return 0;
}

输出:

result = Java
result = Java--到--
result = Java--到--C++

大小写转换

        利用ctype头文件中的tolower和toupper方法编写字符串的大小写转换方法。

#include 
#include 

void lower(char *result, char *str) {
    char *tmp = str;
    while (*tmp) {
        *result = tolower(*tmp);
        result++;
        tmp++;
    }
}

void upper(char *result, char *str) {
    char *tmp = str;
    while (*tmp) {
        *result = toupper(*tmp);
        result++;
        tmp++;
    }
}

int main() {

    char *str = "Yesterday once More";
    char *low, *up;
    lower(low, str);
    upper(up, str);
    printf("low = %snup = %sn", low, up);
    return 0;
}

输出:

low = yesterday once more
up = YESTERDAY onCE MORE

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384493.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号