c++中字符串和数互转

c++字符串转为数

方法一:使用std::stoi

1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
int main()
{
std::string str= "123";
int num = std::stoi(str); //将字符串转换为int类型
std::cout<<num<<std::endl;
return 0;
}

方法二:使用c库函数atoi

1
2
3
4
5
6
7
8
#include <iostream>
#include <cstdlib>
int main()
{
char str[] = "123";
std::cout<<atoi(str)<<std::endl;.//将字符串转化为int型
return 0;
}

c++数转为字符串

方法一:使用c++11中的std::to_string()函数

1
2
3
4
5
6
7
8
#include <iostream>
#include <string>
int main()
{
double a = 1.2;
std::cout<<std::to_string(a)<<std::endl;
return 0;
}

方法二:使用stringstream将数转换为字符串

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <sstream>
int main()
{
double a = 1.2;
std::stringstream ss;
ss<<a;
cout<<ss.str()<<endl;
}

C++中的IO流区别

scanf() 和 cin

两者读取数据时,均以空白字符(空格,Tab,回车)为结束标志位。空白字符会被留在IO流中。当读取数据时,如果开始遇到的字符为空白字符,会一直读取,并且空白字符会被忽略,直到遇到第一个非空白字符。

getline

getline以换行符为结束标志位,空格和Tab也会被读入。和scnaf以及cin的区别是,getline不会将换行符留在io流中,而是会读出来,但是会忽略换行符。

cctype头文件中的函数

函数名 说明
isalnum(c) 当c是字母或数字时为真
isalpha(c) 当c是字母时为真
iscntrl(c) 当c是控制字符时为真
isdigit(c) 当c是数字时为真
isgraph(c) 当c不是空格但可打印时为真
islower(c) 当c是小写字母时为真
isprint(c) 当c是可打印字符时为真(即c是空格或c具有可视形式)
ispunct(c) 当c是标点符号时为真(即c不是控制字符、数字、字母、可打印空白中的一种)
isspace(c) 当c是空白时为真(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符、中的一种)
isupper(c) 当c是大写字母时为真
isxdigit(c) 当c时十六进制数字时为真
tolower(c) 如果c是大写字母,输出对应的小写字母;否则原样输出c
toupper(c) 如果c是小写字母,输出对应的大写字母;否则原样输出c

字符串查找

  1. 使用s.find(args)函数:查找s中args第一次出现的位置,没有则返回s.npos
  2. 使用s.rfind(args)函数:查找s中args最后一次出现的位置,没有则返回s.npos
  3. 使用泛型函数find(beg,end,val),如果没有找到val则返回end

常用的泛型算法

查找算法

find(beg,end,val): 返回一个迭代器,指向输入序列中第一个等于val的元素。

排序算法

sort(beg,end): 默认为升序
sort(beg,end,comp): comp为比较函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
bool MCmp(int a,int b) {
return a>b;
}
int main()
{
vector<int> nums{2,3,1,6,5,7};
sort(nums.begin(),nums.end(),std::greater<int>());//也可以自己写一个greater,如上面的MCmp(int a,int b)
for(auto it: nums) {
cout<<it<<endl;
}
}