C风格字符串

c风格的字符串实际上是一个char[]数组,结尾以字符'\0'结束

c的字符串操作在以下标准库中

<string.h>
<cstring.h> //c++中的库

strlen(s) // 返回s的长度,不包括字符串结束符null
strcmp(s1, s2) //当s1<s2时,返回值<0 ,当s1=s2时,返回值=0 ,当s1>s2时,返回值>0 
strcat(s1, s2) // 将字符串s2连接到s1后,并返回s1 
//strncat_s 安全版本要求指定目的地址的长度
strcat_s(s1, sizeof(s1), s2)
strcpy(s1, s2) // 将s2复制给s1,并返回s1
//strcpy_s 安全版本要求指定目的地址复制的长度 
strcpy(s1, sizeof(s1), s2)

// strncat_s strncpy_s也是相应的安全版本,同样加size参数即可 
strncat(s1, s2, n) // 将s2的前n个字符连接到s1后面,并返回s1
strncpy(s1, s2, n) // 将s2的前n个字符复制给s1,并返回s1
strcspn(s1, ',') //s1中遇到','时的长度

//分割字符串
strtok(s,',') //第一次调用时返回第一段字符串 再调用时用strtok(NULL,',')返回第二段字符串
//安全版本strtok_s
char* buf;
strtok_s(s, ',', &buf)


strchr(s, 's') //return char* which pointer to 's' first location in s
strrchr(s, 's') //return char* which pointer to 's' last location in s

memset(void * ptr, int value, size_t num) //从ptr开始的num字节设置为 value
memcpy(void * dest, const void * src, size_t n) //将src的前n个字节复制到dest

<stdlib.h>
<cstdlib.h> //c++中的库

atoi() //字符串转整数
atof() //字符串转浮点数
atol() //字符串转long
atoll() //字符串转long long

a = "48, 50"
char* pEnd;
strtod(a, &pEnd); //a=48 pEnd 指向逗号
strtof(a, &pEnd)
strtol(a, &pEnd)
strtold(a, &pEnd)
strtoll(a, &pEnd)
strtoul(a, &pEnd)
strtoull(a, &pEnd)


<ctype.h> 对单个字符的操作
<cctype.h> //c++中的库

tolower(c) // 转换为小写
toupper(c) // 转换为大写
isalpha(c) // 是否为字母
isupper(c) // 是否为大写字母
islower(c) // 是否为小写字母

isdigit(c) // 是否为数字
isxdigit(c) //是否为16进制数字(数字 & A~F & a~f)

isalnum(c) // 是否为字母及数字

ispunct(c) // 是否为标点符号
isspace(c) // 是否为空白字符(空格、\r(CR)、\n(LF)、\t(TAB)、\v(VT)、\f(FF))
iscntrl(c) // 是否为控制字符(ASCII 0 ~ 37(0x1F) & 177(0x7F))

isgraph(c) // 是否为可显示字符(字母 & 数字 & 标点)
isprint(c) // 是否为可打印字符(字母 & 数字 & 标点 & 空白)

string与char的转换

char a = 'a';
string b;
//char转string
b.push_back(a);

//string转char
char a = b[0];

string与char*的转换

const char* a = "abc";
string b = "abc";

//const char*转string
string c = string(a);

//string转const char*
const char* d = b.c_str();

//string转非null结尾的const char*
b.data()

C++ string类型

<string.h>
string a = "abc";
string b;


a.capacity()
a.length()
a.size()
a.empty()

a.copy()

getline(cin, b);
a.append("bcd");
a.append("bcd",0,2);
a.substr(0,2);

//查找 失败时返回string::npos
a.find("b") //return 1
a.rfind("b") //从右向左查找
a.find_first_of("c")
a.find_last_of("c")

a.replace(0,2,"bcd") //return "bcdc"
a.insert(1,"bcd") // return "abcdbc"
a.erase(1,1) //return "ac"


//迭代器
a.begin()
a.end();
a.rbegin();
a.rend();

StringStream

在C++中基本格式转换与字符串的格式化非常适合用StringStream来实现

stringsteam ss;

string b;
//int到string的转换,其他类型转换类似
ss << 2;
ss >> b;

stringstring ss;

ss.width(8);
ss<<"abc";
ss.width(8);
ss<<"bcd";

cout << ss.str() << endl; //return "     abc    bcd"

流格式控制

流格式控制有两种基本方式一种是流函数设置一种是流控制符

cout << setw(8) << 1.23 //return "    1.23"
cout << setprecision(2) << 1.233 //return 1.2;
cout << setfill('a') <<setw(8) << 234 // return "aaaaa234";
流程员函数 控制符 作用
precision(n) setprecision(n) 实数位数
width(n) setw(n) 设置字位宽
fill(c) setfill(c) 填充字符c
setf() sefiosflags() 设置输出控制符见下表
格式标志 作用
ios::left 输出数据在本域宽范围内向左对齐
ios::right 输出数据在本域宽范围内向右对齐
ios::internal 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
ios::dec 设置整数的基数为10
ios::oct 设置整数的基数为8
ios::hex 设置整数的基数为16
ios::showbase 强制输出整数的基数(八进制数以0打头,十六进制数以0x打头)
ios::showpoint 强制输出浮点数的小点和尾数0
ios::uppercase 在以科学记数法格式E和以十六进制输出字母时以大写表示
ios::showpos 对正数显示“+”号
ios::scientific 浮点数以科学记数法格式输出
ios::fixed 浮点数以定点格式(小数形式)输出
ios::unitbuf 每次输出之后刷新所有的流
ios::stdio 每次输出之后清除stdout, stderr

results matching ""

    No results matching ""