avatar

函数补漏

C/C++ 函数

全排列dd_while(next_permutation(.begin(),.end()))

该函数在algorithm中,将传入的容器类型中的每一个字符进行一次不重复的排列,如”123456789”,即有9的阶乘种

1
2
3
4
do
{

}while(next_permutation(.begin(),.end()));

string转const char*

函数原型:
const char*std::string::c_str() const
string

字符串转int atoi(const char*_String)

函数原型:
int_cdecl atoi(const char*_String)
cstdlib/stdlib.h

char类型转成int类型

可以直接将char类型转换成int

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
char a[] = "123";
int inta = atoi(a);
cout << inta << endl;

return 0;
}

string类型转成int类型

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

int main()
{
string str = "123";
int intstr = atoi(str.c_str);
cout << intstr << endl;

return 0;
}

字符串复制charstrncpy(char dest,char *src,size_t n)

1
char*strncpy(char *dest,char *src,size_t n)

(c/c++)复制字符串src中的内容(字符,数字、汉字….)到字符串dest中,复制多少由size_tn的值决定。如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+’\0’。

1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
如果n>src由于长度达到src NULL,正常复制,特别注意,如果src中有NULL,strncpy复制到NULL即使没到n也提前停止。如果n = src串长度,与strcpy一致。注意n的选择当n > dest串长度,dest栈空间溢出产生崩溃异常。

2)src串长度>dest串长度
如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest 最后一字符置为NULL。

综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证dest串容量(能容纳下src串)才是最重要的。

字符串比较int strcmp(char str1,char str2)

1
int strcmp(char *str1,char * str2);

函数strcmp的功能是比较两个字符串的大小。也就是把字符串str1和str2从首字符开始逐个字符的进行比较,直到某个字符不相同或者其中一个字符串比较完毕才停止比较。字符的比较为ASCII码的比较。

若字符串1大于字符串2,返回结果大于零;若字符串1小于字符串2,返回结果小于零;若字符串1等于字符串2,返回结果等于零。

int/long/long long转string

1
2
3
4
5
6
7
8
#include<sstream>
using namespace std;

void i2s(int x, string &string_basic){
stringstream ss;
ss << x;
ss >> string_basic;
}

string::npos

返回空字符

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;

int main()
{
string ss = "Hello world";
string s = "l";
for(int i = 0; i < ss.length(); i++){
if(s.find(ss[i])!=string::npos){
cout << "Found l" << endl;
}
else{
cout << "Not found l" << endl;
}
}
return 0;
}

getline

1、在中的函数

  • istream& getline(char* s, streamsize n);
  • istream& getline(char* s, streamsize n, char delim);
    从istream中读取至多n个字符(包括结束标记符delim)保存在s对应的数组中,即使没有读够n个字符,如果遇到delim或字数达到了限制,则读取终止,delim都不会被保存在s对应的数组中。

例1

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <istream>
using namespace std;

int main()
{
char name[256];
cout << "Please input your name : " << endl;
cin.getline(name, 256);
cout << name << endl;
return 0;
}

input:
1
Mr.bao

out:
1
Mr.bao

例2 //超过字符上限或遇到终止字符
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <istream>
using namespace std;

int main()
{
char name[6];
cin.getline(name, 6, '#');
cout << name << endl;
return 0;
}

input:
1
wonderful

out:
1
wonde

input:
1
won#derful

out:
1
won

2、在中的函数

  • istream& getline(istream& is, string& str, char delim);
  • istream& getline(istream&& is, string& str, char delim);
  • istream& getline(istream& is, string& str);
  • istream& getlibe(istream&& is, string& str);

用法和上一种类似,但是读取的istream是作伟参数is传进函数的,读取的字符串保存在string类型的str中。

函数变量:
is:表示一个输入流,例如cin
str:string类型的引用,用在存储输入流中的流信息
delim:char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到‘\n’,则终止输入

istringstream

将字符串中按照空格来分割字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main()
{
string str = "I am a student";
istringstream iss(str);
string temp;
while (iss >> temp) {
cout << temp << endl;
}
return 0;
}

out:
1
2
3
4
I
am
a
studen

Python 函数


Java 函数

文章作者: 安河桥北以北
文章链接: http://chenai007.github.io/2020/03/14/C++/%E5%87%BD%E6%95%B0%E8%A1%A5%E6%BC%8F/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ash's blog

评论