C++ string类型常用操作

风陵南·2024-08-16 10:25·171 次阅读

C++ string类型常用操作

string类型操作

字符串切割#

str.substr(索引,切割的个数)  ->  返回字符串

注意:第二个参数为切割的个数

string buf = "abcdefg";
buf.substr(0, 2); // 结果为 "ab"
buf.substr(1, 3); // 结果为 "bcd"

按字符切割为子字符串 #

利用sstream.h头文件和getline()函数

string s = "hello,world,!,My,name,is,C++", t;
stringstream ss;
ss << s;
vector<string> res;
while (getline(ss, t, ','))
res.push_back(t);
for (auto i : res)
cout << i << endl;

 

 #

字符串输入#

使用getline读入字符串可以保留字符串中的空格

 getline(cin , s1);

使用cin  在遇到空格或回车时停止

cin >> s1; 

多字符串的输入,遇到空格代表当前字符串赋值完成,转到下个字符串赋值,回车停止

cin >> s2 >> s3;

 

字符串比较#

compare()函数  返回值为 int 类型

  • 简单用法:str.compare("abc");  // str = "abc" 则返回 0 
  • 大小比较
    • a.compare(b) > 0  则表示 a > b
    • a.compare(b) < 0  则表示 a < b

 

cctype头文件(判断字符类型:大/小写字母、标点、数字等)#

isalnum(c)  // 当是字母或数字时为真
isalpha(c)  // 当是字母时为真
isdigit(c)  // 当是数字是为真
islower(c)  // 当是小写字母时为真
isupper(c)  // 当是大写字母时为真
isspace(c)  // 当是空白(空格、回车、换行、制表符等)时为真
isxdigit(c) // 当是16进制数字是为真
ispunct(c)  // 当是标点符号时为真(即c不是 控制字符、数字、字母、可打印空白 中的一种)
isprint(c)  // 当时可打印字符时为真(即c是空格或具有可见形式)
isgraph(c)  // 当不是空格但可打印时为真
iscntrl(c)  // 当是控制字符时为真
tolower(c)  // 若c是大写字母,转换为小写输出,否则原样输出

 

搜索操作#

int index = str.find(arg)  找到arg第一次出现的位置

str.rfind()  找到arg最后一次出现的位置

如果没找到返回 -1

例如:

string buf = "abcdefg";
buf.find("cde"); // 结果为 2
buf.find("ff"); // 结果为 -1
  • 找到args中任意一个字符最早\最晚出现的位置

s.find_first_of(args)   // 在s中找到args中任意一个字符最早出现的位置

s.find_last_of(args)   // 在s中找到args中任意一个字符最晚出现的位置

例如:

string s1 = "nice to meet you~";
cout << s1.find_first_of("mey") << endl; // 输出结果为 3,'e' 出现的最早
  • 在 s 中查找 第一个/最后一个 不在 args 中的字符的位置


s.find_first_not_of(args)  // 查找 s 中 第一个不在 args 中的字符的位置
s.find_last_not_of(args)  // 查找 s 中 最后一个不在 args 中的字符的位置
例如:
string s1 = "nice to meet you~";  
cout << s1.find_first_not_of("nop") << endl; // 输出结果为 1 ,'i' 不在 "nop" 里

 

类型转换(可以完成任意进制转10进制)#

  • 将任意类型转换为string类型 (val可以是任何算数类型,int、double等)

  string s = to_string(val)

  • 将string类型转换为整型(需包含cstdio头文件)

 int num1 = stoi(s, p , b) //  s表示字符串,p是指针,用来保存s中第一个非数值的下标,默认为0,也可以是空指针

                                            // b是进制数 ,将字符串作为几进制的数转换,最终结果仍然以10进制表示

                                            //(相当于任意进制转为10进制)

还有其他几种接收类型

int num = stoi(s)  // 默认10进制

long num stol(s, p, b)  //  返回long型

unsigned long num stoul(s, p, b)  //  返回unsigned long型

long long num stoll(s, p, b)  //  返回long long型

unsigned long long num stoll(s, p, b)  //  返回unsigned long long型

  • 将string类型转换为浮点数

stof(s)  stof(s,p) stod(s,p) stold(s,p) // 分别对应float、double、long double类型

  • char型转数值函数原型 int atoi(const char *_Str) 传入参数是指针类型,所以要对字符取地址

    atoi(c)  // int类型

    atol(c)  // long类型

    atoll(c)  // long long类型

    atof(c)   // float类型

  • char类型转为整数类型建议直接使用加减法转换
    • 在ASCII码表中数字0~9的ASCII码值为48~57
    • 直接使用int类型接收char类型的同时减去48,即可得到该数字的整数类型
char c = '9';
int num = c - 48; // num = 9

 

进制转换(10进制转其他)#

使用<sstream>头文件

stringstream ss;

int num = 32;

ss << hex << num;

string hexStr = ss.str();

这样就通过字符串完成了10进制到16进制的转换

其他进制:

oct 8进制

默认 就是10进制

  • 进制转换配合std::setw 和 std::setfill使用效果更佳  头文件“iomanip”
    • setw() 用于设置后续输出操作的最小字段宽度。这意味着,如果输出的数据少于指定的宽度,它将在数据前面填充空格,以确保字段至少有指定数量的字符宽。如果数据超过指定的宽度,它将正常输出,而不会截断数据。
    • setfill() 用于设置填充字符,该字符用于填充由 std::setw 指定的字段宽度不足的部分。默认的填充字符是空格。
decocthexchdecocthexchdecocthexchdecocthexch0000NUL (空)324020(空格)6410040@9614060`1101SOH (标题开始)334121!6510141A9714161a2202STX (正文开始)344222"6610242B9814262b3303ETX (正文结束)354323#6710343C9914363c4404EOT (传送结束)364424$6810444D10014464d5505ENQ (询问)374525%6910545E10114565e6606ACK (确认)384626&7010646F10214666f7707BEL (响铃)394727'7110747G10314767g81008BS (退格)405028(7211048H10415068h91109HT (横向制表)415129)7311149I10515169i10120aLF (换行)42522a*741124aJ1061526aj11130bVT (纵向制表)43532b+751134bK1071536bk12140cFF (换页)44542c,761144cL1081546cl13150dCR (回车)45552d-771154dM1091556dm14160eSO (移出)46562e.781164eN1101566en15170fSI (移入)47572f/791174fO1111576fo162010DLE (退出数据链)48603008012050P11216070p172111DC1 (设备控制1)49613118112151Q11316171q182212DC2 (设备控制2)50623228212252R11416272r192313DC3 (设备控制3)51633338312353S11516373s202414DC4 (设备控制4)52643448412454T11616474t212515NAK (反确认)53653558512555U11716575u222616SYN (同步空闲)54663668612656V11816676v232717ETB (传输块结束)55673778712757W11916777w243018CAN (取消)56703888813058X12017078x253119EM (媒介结束)57713998913159Y12117179y26321aSUB (替换)58723a:901325aZ1221727az27331bESC (退出)59733b;911335b[1231737b{28341cFS (文件分隔符)60743c<921345c\1241747c|29351dGS (组分隔符)61753d=931355d]1251757d}30361eRS (记录分隔符)62763e>941365e^1261767e~31371fUS (单元分隔符)63773f?951375f_1271777fDEL (删除)
 
posted @   风陵南  阅读(171)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示
目录