您现在的位置是:首页 >技术教程 >C++ 和 C 语言字符串操作整理网站首页技术教程

C++ 和 C 语言字符串操作整理

青尾魚 2025-03-31 12:01:03
简介C++ 和 C 语言字符串操作整理

C++ std::string 操作

常见方法

操作方法
赋值=
求长度size(), length()
拼接+, +=, append()
访问字符[], at(), front(), back()
查找find(), rfind()
提取子串substr()
替换replace()
插入insert()
删除erase()
比较compare(), ==, <, >
转换大小写transform()(需 <algorithm>
去除空白需自定义 trim()
拆分字符串需自定义 split()
转换数值stoi(), stol(), stod(), to_string()
判断空字符串

empty()

代码示例

#inclide <iostream>
#include <string>
int main()    
{
    string str1 = "helio";//创建
    string str2 = "world";//创建

    string str3 = str1 + str2;//字符串拼接
    cout << str3 << endl;

    cout << str3.size() << endl;
    cout << str1.length() << endl;

    cout << str1 + str2 <<endl;//拼接字符串

    cout << ((str1 + str2) == "hello world") << endl;//比较

    cout << str3.insert(2,"InserT") << endl;//插入insert(索引,字符串)
    cout << str3 << endl;

    cout << str3.erase(2,6) << endl;//删除 erasse(索引,长度)
    cout << str3 << endl;

    str2 += "!";//追加字符串
    cout << str2 << endl;

    str2.append("???");//追加字符串
    cout << str2 << endl;

    cout << str1[3] << endl;//str[]访问
    cout << str1.at(3) << endl;// at()访问

    str1[3] = 'L';//修改字符串
    cout << str1.at(3) << endl;
    cout << str1 << endl;

    cout << str3.front() << endl;//获取首字符
    cout << str3.back() << endl;//获取末字符

    cout << str3.substr(5,5) << endl;//提取子串substr(起始索引,长度)

    string str4 = "Hello World!";
    size_t pos = str4.find("World");//find()函数查找子串,返回的pos为查找的子串World中的第一个字符W的索引,即起始索引,
/* 
size_t:
  - 无符号整数类型 (unsigned int)
  - 不能存储负数
  - 通常用于数组索引、字符串长度、内存大小
  - 适用于 `sizeof()`, `std::string::find()`

int:
  - 有符号整数 (signed int)
  - 可以存储负数
  - 适用于一般的数学计算
*/
/* 
string::npos 是 size_t 类型的最大值,用于表示 `find()` 查找失败的情况。
size_t 是无符号整数类型,通常用于存储数组索引和字符串大小,不能表示负数。
*/

    if(pos != string::npos)//若find()返回的Pos为  string::npos ,则意味着查找失败
    {
        cout << "Find at:" << pos << endl;
    }
    str4.replace(pos,5,"C++");//replace(起始位置,替换长度,替换内容)为替换子串的函数
    cout << str4 << endl;


    cout << (str1 <= str2) << endl;//比较字符串 == 、!=、<=、>=
    cout << str1.compare(str2) << endl;//比较字符串 <0 表示str1 < str2

    string str5 = "123";
    cout << stoi(str5) << endl;//stoi() 只能解析 int 范围内的整数,如果超出范围会抛出 std::out_of_range 异常。
    cout << stol("1234567") * 2 << endl;//stol将字符串转化为整数,适用于 long 类型的整数,支持更大范围的整数。

    string str6 = "3.14";
    float num = stod(str6) + 6.28;//stod()将字符串转化为浮点数
    cout << num << endl;
    cout << stod("3.18") << endl;
    cout << stol(str6) * 2 << endl;
    
    float snum = 2.33;
    cout << to_string(snum) << endl;//to_string()将数值转化为字符串
    cout << to_string(123.44) << endl;

    string str7 = "";//empty()函数判空,空格也算不空,不信可以试试,若为空返回1,不为空返回0;
    cout << (str7.empty() ? "Empty" : "Unempty") << endl;
}

C 语言 char[] 字符串操作

常见函数

操作方法
获取长度strlen(s)
复制字符串strcpy(d,s), strncpy(d,s,n)
连接字符串strcat(d,s), strncat(d,s,n)
比较字符串strcmp(s1,s2), strncmp(s1,s2,n)
查找字符strchr(s,ch), strrchr(s,ch)
查找子串strstr(s1,s2)
拆分字符串strtok(s,delim)
复制内存memcpy(d,s,n), memmove(d,s,n)
字符串转整数atoi(s), atof(s)
整数转字符串sprintf(buf,"%d",n)

代码示例

#include <stdio.h>
#include <string.h>
int main()
{
   char str[] = "Hello,World!";
   printf("Lengtn: %llu
",strlen(str));//strlen()函数计算字符串长度,包括空格

   char dest[20];
   strcpy(dest,"Hello World!???");//strcpy(字符串,"待复制字符串"),用于复制字符串
   dest[12] = '';
   printf("%s
",dest);//更安全的方法可使用strncpy()

   char dest1[20] = "Hello";
   char dest2[] = " World!";
   char dest3[] = "Hello";
   strcat(dest1,dest2);//strcat(str1,str2)函数将str2连接到str1字符串上
   printf("%s
",dest1);

   printf("%d
",strcmp(dest3,dest2));//strcmp(str1,str2)比较字符串大小,若str1大于str2,返回值>0,若小于,返回值<0,若等于,返回值等于0
   printf("%d
",strcmp(dest2,dest3));
   printf("%d
",strcmp(dest3,"Hello"));

   char *p = strchr(dest1,'o');//strchr()在字符串中查找第一个匹配字符的位置
   printf("%s
",p);

   char *q = strrchr(dest1,'o');//strrchr()在字符串中查找最后一个匹配字符的位置
   printf("%s
",q);

   char *o = strstr(dest1,"World");//strstr()在字符串中查找子串
   printf("%s
",o);

   printf("%d
",atoi("123"));//atoi()将字符串转化为整数
   printf("%f
",atof("123.45"));//atof()将字符串转化为浮点数
   
}

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。