美文网首页
C&C++常用方法笔记 -常用字符串操作

C&C++常用方法笔记 -常用字符串操作

作者: 月影路西法 | 来源:发表于2019-05-05 22:06 被阅读0次

    在下列文字中会使用如下函数

    printf()//打印

    sizeof(获取大小的对象)//获取大小

    atoi(要转换成int的对象) //字符串转换

    strtod(将字符串转换成浮点数

    strcmp(字1,字2)//字符串比较

    strstr(包含对象,包含字段)//包含

    strlen(字符串)//检测字符串长度

    strcpy(cpy, str);// str 会 copy 到 cpy 里面

    strcat(cpy, str);//拼接

    substr(str,0,5);//截取 长度0-5的字符

    tolower(ch)//大写转小写

    #include <stdio.h>

    #include <string.h>

    #include <stdlib.h>

    #include <ctype.h>

    1.字符串定义

    void main(){

    // 第一种 字符串数组

    char str[] = {'D','a','r','r','e','n','\0'};

    str[2] = 'y';

    printf("%s\n",str);// 字符串结尾是 '\0'

    // 第二种

    char *str1 = "Darren";

    str1[2] = 'y';

    printf("%s", str1);

    // 区别,一个能修改一个不能修改

    getchar();

    }

    2.长度获取方法 sizeof

    int strlen_(char *str){

    // 怎么获取字符串的长度? 不断读取字符,判断末尾 '\0'

    int len = 0;

    while (*str != '\0')

    {

    len++;

    str++;

    }

    return len;

    }

    // 字符串长度获取

    void main(){

    char *name = "Darren is";

    char str[] = { 'D', 'a', 'r', 'r', 'e', 'n', '\0','i','s' };

    // 怎么获取长度?有一种方式计算(不好使)

    // printf("length is %d",sizeof(str)/sizeof(char));

    printf("name length is %d\n", strlen(str));

    // 自己来写一个方法读取字符串的长度

    // strlen_(name);

    printf("name length is %d", strlen_(str));

    getchar();

    }

    3 字符串的转换

    1.int/float to string/array:

    C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。

    ● itoa():将整型值转换为字符串。

    ● ltoa():将长整型值转换为字符串。

    ● ultoa():将无符号长整型值转换为字符串。

    ● gcvt():将浮点型数转换为字符串,取四舍五入。

    ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。

    ● fcvt():指定位数为转换精度,其余同ecvt()。

    除此外,还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢

    2. string/array to int/float

    C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。

    ● atof():将字符串转换为双精度浮点型值。

    ● atoi():将字符串转换为整型值。

    ● atol():将字符串转换为长整型值。

    ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

    ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

    ● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

    void main(){

    // char * num = "1"; -> int float double

    // char *num_str = "12.0xxx";

    // int number = atoi(num_str);// 如果不能转换就是 0 ,后面如果有其他不是数字的就会被剔除 12xxx -> 12

    // char *num_str = "12.5f";

    // float number = atof(num_str);// 如果不能转换返回的是默认值 0.000000

    char *num_str = "12.5xx";

    double number = strtod(num_str, NULL);

    printf("number is %lf",number);

    getchar();

    }

    4字符串的比较 strcmp

    C/C++函数,比较两个字符串

    设这两个字符串为str1,str2,

    若str1=str2,则返回零;

    若str1<str2,则返回负数;

    若str1>str2,则返回正数。

    matlab中函数,strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false

    void main(){

    char* str1 = "Darren is";

    char* str2 = "darren";

    // 大于小于等于

    // int rc = strcmp(str1, str2);// 区分大小写比较

    // int rc = _strcmpi(str1, str2);// c strcmpi c++ _strcmpi , andrroid ndk strcasecmp

    // 比较前几个

    // int rc = strncmp(str1, str2,7);// count 代表的是比较字符串前几个是否相等

    int rc = _strnicmp(str1, str2, 6);

    if (rc == 0){

    printf("相等");

    }

    else{

    printf("不相等");

    }

    getchar();

    }

    5 字符串查找,包含 strstr

    包含文件:string.h

    函数名: strstr

    函数原型:

    1externchar*strstr(char*str1, constchar*str2);

    语法:

    1* strstr(str1,str2)

    str1: 被查找目标 string expression to search.

    str2: 要查找对象 The string expression to find.

    返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。

    void main(){

    char* str = "name is Darren";

    char *substr = "not";

    char* pos = strstr(str, substr);// 返回的是字符串第一次出现的位置(位置指针), 如果没有找到返回的是空

    // 求一下位置 int 怎么办? strstr

    // int postion = pos - str;

    // printf("第一次出现的位置是:%d\n",postion);

    // 包含?pos 是不是空就可以了

    if (pos){

    printf("%s", "包含");

    }

    else{

    printf("%s", "不包含");

    }

    getchar();

    }

    6 拼接,截取,大小写转换

    void main(){

    // strcpy(); copy进来

    char* str = "darren";

    char *str1 = " is";

    // char* str1 = "is";

    int len = strlen(str);// cpy[len] android studio 是可以的

    char cpy[20];

    // str 会 copy 到 cpy 里面

    strcpy(cpy, str);

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

    // 拼接

    strcat(cpy,str1);

    printf("%s", cpy);

    getchar();

    }

    char * substr(char * str,int start,int end){

    // 开辟一个字符串去存储我们的数据,开辟多大计算

    // char sub[end-start];

    int len = end - start;

    char* sub = (char*)malloc(len*sizeof(char)+1);// 记得加上1 ,在 NDK 一般会采用静态的数组存储 char sub[len]

    // malloc 一定要 free

    // 遍历赋值

    str += start;

    for (int i = 0; i < len; i++)

    {

    sub[i] = *str;

    str++;// 指针往后逻一位

    }

    // 标记字符串结尾,否则 print 无法判断结尾

    sub[len] = '\0';

    printf("%p\n",sub);

    // free(sub);

    return sub;

    }

    7 字符串的截取 substr

    void main(){

    char *str = "Darren is";

    // 截取第三个位置到第五个位置 3,5

    char *sub = substr(str,0,5);

    printf("%p\n", sub);

    printf("%s",sub);

    // 一定要 free ,因为你的 substr 有动态开辟内存,但是真正开发过程中并不会这么做,自己的方法尽量要自己处理好内存

    free(sub);

    getchar();

    }

    // dest 用来存放结果,大小自己指定

    // source 需要转换的字符串

    void lower(char* dest,char* source){

    while (*source != '\0'){

    // 拿当前字符

    char ch = *source;

    // 转完赋值给 dest

    *dest = tolower(ch);// a -> a A -> a

    // 接着指针 ++ ,遍历下一个

    source++;

    dest++;

    }

    // 标记字符串结尾

    *dest = '\0';

    }

    8 大小写转换 lower

    void main(){

    char* name = "daRRen";

    char dest[20];

    lower(dest,name);

    printf("%s",dest);

    getchar();

    }

    */

    相关文章

      网友评论

          本文标题:C&C++常用方法笔记 -常用字符串操作

          本文链接:https://www.haomeiwen.com/subject/ahdhoqtx.html