跳转至

字符串函数

约 677 个字 142 行代码 预计阅读时间 4 分钟

1.strlen

char c [] = "abc"; // char c [] = {'a','b','c','\0'};
cout << strlen(c) << endl;
  • 定义:计算数组中'\0'之前的字符的长度。
  • 返回值是无符号整形(例)。
    strlen("abcd") - strlen("abcdef") > 0 注意这里转成int型换变成正数所以是大于0
    //最好不要做加减
    

2.strcpy

    char arr1[20] = "a";
    char arr2[] = "abc";
    strcpy(arr1, arr2);
  • 定义:将源数组内容拷贝到目标数组中。
  • 源字符串必须以‘\0’结束,否则就会导致越界。
  • strcpy会将源字符串的‘\0’拷贝到目标空间,目标空间要足够大,目标空间必须可变。

3.strcat

char arr1[20] =  "hello" ; //这里的char数组大小最好预先定义
char arr2[10] =  "world" ;
strcat(arr1, arr2);
printf("%s", arr1);
strcat(arr2,arr2)//错误
  • 定义:将源字符串的内容追加到目标字符串空间中。从目标空间'\0'处 开始追加。
  • 易错:自己追加自己会导致死循环。
  • 特别注意!:源字符串和目标字符串必须以‘\0’结束,目标空间必须足够大,目标空间必须可修改。

4.strcmp

定义: 比较两个字符串中对应位置上的字符大小,直到找到不同或'\0'。

  • 当str1>str2时,返回>0的数
  • 当str1<str2时,返回<0的数
  • 当str1=str2时,返回0
    char arr1[] = { "abcd" };
    char arr2[] = { "abcdef" };
    char arr3[] = { "qq" };
    int re1 = strcmp(arr3, arr2);
    int re2 = strcmp(arr3, arr3);
    int re3 = strcmp(arr1, arr2);
    

5.strncpy,strncat,strncmp

可以指定长度进行相应的操作,使代码变得相对安全

  • char strncpy [] ( char destination [], const char source [], size_t num );(目标空间,源字符串,复制个数)
  • char strncat [] ( char destination [], const char source [] , size_t num );(目标空间,源字符串,追加个数)
  • int strncmp ( const char str1 [] , const char str2 [], size_t num );

6.springf

用于将格式化的数据写入字符串中,类似于printf函数,但是不是将结果打印到标准输出流,而是写入到一个字符数组中

char buffer[100];
int num = 42;
sprintf(buffer, "The answer is %d", num);
printf("%s\n", buffer); // 输出: The answer is 42

7.strchr

用于在一个字符串中搜索指定字符的第一次出现,并返回该字符的指针

const char *str = "hello world";
char *ptr = strchr(str, 'o');

8.strstr

用于在一个字符串中搜索指定子字符串的第一次出现,并返回该子字符串的指针,没有找到则返回NULL

const char *haystack = "hello world";
const char *needle = "world";
char *ptr = strstr(haystack, needle);

9.strtok

用于将字符串分解为一个个标记(token)

  • 第一次调用strtok(),传入的参数str是要被分割的字符串"This is a sample string",而成功后返回的是第一个子字符串"This"
  • 而第二次调用strtok的时候,传入的参数应该为NULL,使得该函数默认使用上一次未分割完的字符串继续分割 ,就从上一次分割的位置"This"为本次分割的起始位置,直到分割结束。
    char str[] = "This is a sample string";
    const char delim[] = " ";
    char *token = strtok(str, delim);
    while (token != nullptr) {
        printf("%s\n", token);
        token = strtok(nullptr, delim);
    }
    
    
    
    
    char str[] = "Hello,World!This,is,a,comma,separated,string";
    const char delim[] = ",!"; // 定义分隔符,包括逗号和感叹号
    //注意这里可以定义多个分隔符
    // 使用 strtok 函数切割字符串
    char *token = strtok(str, delim);
    
    // 循环获取所有子字符串
    while (token != NULL) {
        printf("%s\n", token);
        // 进行下一次切割,传递 NULL 表示使用同一个字符串
        token = strtok(NULL, delim);
    }
    

10.atoi 或者用 stoi

用于将字符串转换为整数。函数将返回转换后的整数值。它会从字符串的开头开始解析,直到遇到第一个非数字字符为止(可以包含正负号),然后将解析到的数字部分转换为整数返回。如果字符串中没有合法的数字,则返回 0。

char str[] = "+12345";
int num = atoi(str);
printf("Converted number: %d\n", num);

char * 与char []的转换

char str[] = "example";
char *ptr = str; // 直接将数组名赋给指针即可






char *ptr = "example";
int len = strlen(ptr);
char arr[len + 1]; // 需要额外的空间来存储字符串的拷贝以及终止符 '\0'
strcpy(arr, ptr);

综合应用:替换 删除 。。。

//全部拼接在一起
char ans [] = "";
char delim [] = " ,";
char * token = strtok(b,delim);
while(token != nullptr){
    strcat(ans,token);
    token = strtok(nullptr,delim);
}
cout << ans << endl;







// 字符串替换

//第一种
void replace (char * b,const char * a,const char * c){
    int lenA = strlen(a);
    int lenC = strlen(c);
    char * p = strstr(b,a);
    while(p != NULL){
       if(lenA > lenC){
           for (int i = 0; i <= strlen(p); i++) p[lenC + i] = p[lenA + i];
       }
       else{
           for (int i = 0; i <= strlen(p); i++) p[strlen(p) + lenC - lenA - i] = p[strlen(p) - i];
       }
       for (int i = 0 ; i < lenC; i++)p[i] = c[i];
       p = strstr( b + lenC,a);
    }
}
//第二种
void replace(char * b,const char *a,const char * c){
    int lenA = strlen(a);
    int lenC = strlen(c);
    char * p = strstr(b,a);
    while(p != NULL){
        memmove(p + lenC, p + lenA,strlen(p + lenA) + 1);
        memcpy(p,c,lenC);
        p = strstr(p + lenC,a);
    }
}
//将b中的所有a替换成c
int main(){
    char b[100] = "I love nanjing,I love China";
    const char * a = "love";
    const char * c = "like";
    replace(b,a,c);
    cout << b << endl;
    return 0;


}

// 第二种的替换方法
void replace(char * b, const char * a, const char * c) {
    int lenA = strlen(a);
    int lenC = strlen(c);
    char * p = strstr(b, a);
    while (p != NULL) {
        // 计算替换后字符串的长度
        // 将剩余部分(包括 null 终止符)复制到新位置
        strncpy(p + lenC, p + lenA, strlen(p + lenA) + 1;);
        // 将新字符串复制到位置 p
        strncpy(p, c, lenC);
        // 寻找下一个匹配位置
        p = strstr(p + lenC, a);
    }
}

颜色主题调整

评论区~

有用的话请给我个赞和 star => GitHub stars
快来跟我聊天~