Discuz! Board

 找回密码
 立即注册
查看: 2772|回复: 5

常用函数速查

[复制链接]

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
发表于 2022-10-21 17:55:23 | 显示全部楼层 |阅读模式
1.字符数组相关函数 char[]

2.字符串相关函数 string

3.内存操作相关函数 memory

4.输入函数 cin

5.输出函数 cout


回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
 楼主| 发表于 2022-10-21 17:55:49 | 显示全部楼层
1、求字符串长度
strlen
size_t strlen(const char * str);
●字符串已经将’0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’\0’)。
●参数指向的字符串必须要以’\0’结束。
●注意函数的返回值为size_t,是无符号的。(注意)
size_t strlen(const char * str);

2、长度不受限制的字符串函数
(1)strcpy(字符串复制函数,将source字符串复制到destination。)
char * strcpy(char * destination,const char * source);
●源字符串必须以 '\0’结束。
●会将源字符串中的 '\0’拷贝到目标空间。
●目标空间必须足够大,以确保能存放源字符串。
●目标空间必须可变。

(2)strcat(字符串拼接函数,本质也是拷贝,将source字符串拼接到destination字符串。)
char * strcat ( char * destination, const char * source );
●源字符串必须以 '\0’结束。
●目标空间必须有足够的大,能容纳下源字符串的内容。
●目标空间必须可修改。

(3)strcmp(字符串比较函数,通常是比较字符大小,与字符串长度无关)
int strcmp ( const char * str1, const char * str2 );
●第一个字符串大于第二个字符串,则返回大于0的数字。
●第一个字符串等于第二个字符串,则返回0。
●第一个字符串小于第二个字符串,则返回小于0的数字。
注意:这里的比较指的是从第一个字符比较到最后一个字符,比较的是ascii码。

3、长度受限制的字符串函数介绍(这组函数跟上边的第二组函数相似,只不过是指定了长度)
(1)strncpy
char * strncpy ( char * destination, const char * source, size_t num );
●拷贝num个字符从源字符串到目标空间。
●如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

(2)strncat
char * strncat ( char * destination, const char * source, size_t num );
●将源的第一个数字字符附加到目标,再加上一个终止的空字符。
●如果source中C字符串的长度小于num,则只复制不超过终止空字符的内容。

(3)strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
●比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

4、字符串查找
(1)strstr(在长字符串里面找第一次自字符串,找到的话,就输出从找到位置开始至到长字符串结束的字符串。找不到就输出NULL。)
char * strstr ( const char * , const char * );
●返回指向长字符串中第一次出现自字符串的指针,如果子字符串不是长字符串的一部分,则返回空指针。

回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
 楼主| 发表于 2022-10-21 17:59:35 | 显示全部楼层
如下有些包含在< string >头文件里,只能string类型使用,有些既可以在容器也可以在string中,string的绝大多数用字符串数组变量(char*)不行,特殊的我会标明。

一.构建string类型
1:string str;                         // 生成空字符串 str
2:string s(str);                       //生成字符串s  并用str初始化
3:string s(str, begin,len); // 将字符串str中从下标begin开始、长度为len的部分作为字符串初值
4:string s(str,len);                 //以string类型str的前len个字符串作为字符串s的初值
5:string s(num,char);                 // 生成num个c字符的字符串
6:string s(str,index):      //将字符串str中从下标index开始到字符串结束的位置作为字符串初值

PS:
1,2,3,4,6可以认为:
string s(str,begin,len)  begin缺省时默认为0,len缺省时默认从begin到串尾。
(begin是下标,不是迭代器)。

二,string类型的输入
1: cin>>str;
2:  getline(cin,str,b);          //str只能时string类,必须包含<string>,b为结束标志
3:  cin.getline(str,len,b);       //str可以是char*,且为STL函数,不需要<string>

PS:
1 从缓冲区第一个不为不为空或’\n'的位置开始读,不能接受含任何空格的字符串,且输入后,’\n'仍留在缓冲区,
  需要getchar()吃掉
2,3会自动去掉'\n'

三,字符串的比较
字典顺序小的字符串小

string a="book",b="black";
则:a<b
四,string的插入(单个字符):push_back,insert( )
s1.push_back('a');              //在尾部插入一个字符
s1.insert(s1.begin()+i,n,c)     //在下表为i的位置,插入n个字符,n缺省时为 1

PS:这两个函数在vector中也有,用在string中时不必<string>头文件也可使用。
五,string的拼接字符串:append( ),+
string s1="abc",s2="def";
s1.append(s2);           //在s1的末尾加上s2,s2为 "abcdef";
s1.append(s2,pos,len)    //在s1的末尾加上s2从pos(索引)处开始len个字符的子串。
s1.append(s2,len)        //在s1的末尾加上s2的前len个字符
s1.append(n,c)           //在s1的末尾加上n个字符c。
s1.append(s2.begin(),s2.end())   //用迭代器截取s2的中间字串,并拼接在s1的末尾。
s1+=s2;            

PS:
(1):append()属于<string>,s1.append(s2),在s1的末尾加上s2,s2可以是string或conSt char*
(2):+ 则是重载运算符。

六,string的字符串替代函数:replace()
原型:string& replace (size_t pos, size_t len, const string& str);
原型:string& replace (iterator i1, iterator i2, string& str);
原形:string& replace (size_t pos, size_t len, const string& str, size_t subpos);

str.replace(pos,len,arr) ;               //将str的pos位置开始len长度的字符替换为arr   
str.replace(str.begin(),str.end(),str);  //将str的begin开始到end的字符替换为arr,迭代器操作
str.replace (pos,len,arr,pos2,len2);     //替换为arr从pos2开始len2长度的字串。
PS:
replace()只属于<string>
七,string的删除指定位置字符或字串:erase()
string& erase( size_t pos = 0m size_t n = npos);
interator erase( iterator position);
iterator erase( iterator first, iterator last);

对应得三种用法:
erase(pos,n);       //将string的pos处开始的n个字符删去,返回值修改后的string对象引用
erase(position);    //删除position处的字符,position 是迭代器,并返回下个元素的迭代器
erase(first,last); //将区间[first,last]删去,fast和last都是迭代器,返回last下个字符的迭代器
PS:
(1)erase()既在<string>中,也可以用来操作容器,如2,3。
(2)void pop_back()也可以用来删去容器的最后一个字符。
八,string 大小替换函数
检查字符是否为字母
bool isalpha(ch);
检查字符是否为数字
bool isdigit(ch);
检查字符是否为英文字母小写
bool islower(ch);
检查字符是否为英文字母大写
bool isupper(ch);
检查字符是否为英文或者数字
bool isalnum(ch);

1.大写转小写
low_ch = tolower(high_ch);
2.小写转大写
high_ch = toupper(low_ch)

PS:以上是标准函数库函数,不包含在<string>头文件
    以下是对整个字符串操作,是要包含在<string>中的,返回值转变后的指针

1.str=strupr(str)    //转大写
2.str=strlwr(str)    //转小写
九,string中查找指定字符或字符串:find()
string s1="absade";
cout<<s1.find('a');          //默认找到第一个
cout<<s1.find(2,'a');        //从下标2开始寻找一直到末尾
cout<<s1,rfind('a')          //反向寻找
cout<<s1.find_first_of('a'); //找到第一个
cout<<s1.find_last_of('a');  //找到最后一个
cout<<s1.find("bs");         //找字串

十,字符串截取
  • String str = "Hello,World!";
  • String substr1 = str.substring(6);     //"World!"


  • String str = "Hello,World!";
  • String substr2 = str.substring(6, 10);     //"Worl"

PS:
(1)find()函数用的很广,需要包含在<algorithm>,主要用在查找容器的某个对象,返回值是迭代器,用在string中,主要用于查找指
    定字符和子串,返回值是下标。
(2)如果没找到对象,迭代器返回最后一个的下一个,下标则返回一个特殊值,s1,npos。
十,排序函数
sort(s.first,s.end,cmp)  //按照cmp方法,对str从first,到end,开始排序,cmp可自定义
//该函数需要包含<algorithm>,许多对象都可以使用
回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
 楼主| 发表于 2022-10-21 17:59:57 | 显示全部楼层
内存操作函数(mem*系列函数操作的基本单位是字节,与类型无关。)
(1)memcpy(拷贝函数,与stccpy的区别,strcpy只能拷贝字符串,而memcpy却能拷贝结构体、字符串、数组等。)
void * memcpy ( void * destination, const void * source, size_t num );
●函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
●这个函数在遇到 '\0’的时候并不会停下来。
●如果source和destination有任何的重叠,复制的结果都是未定义的。

(2)memmove(其实也是拷贝函数,只不过可以进行重叠内存部分的拷贝。)
void * memmove ( void * destination, const void * source, size_t num );
●和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
●如果源空间和目标空间出现重叠,就得使用memmove函数处理。

(3)memset
void * memset ( void * ptr, int value, size_t num );
●将ptr中的num个字节设置成value。
●注意:memset是对一个字节进行操作的,所以如果是对char类型进行操作的话,完全没有问题,因为char类型本身就是占一个字节。但是对其余类型的变量进行操作,只有赋值0的时候,才是正确的,否则就会出现其他的值。

(4)memcmp
==int memcmp ( const void * ptr1,const void * ptr2, size_t num ); ==
●比较从ptr1和ptr2指针开始的num个字节
●当ptr1大于ptr2时,输出大于0的数。当ptr1小于ptr2时,输出小于0的数。两者相等时,输出零。
●注意:这里也是比较的对应字符的ascii码。


回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
 楼主| 发表于 2022-10-21 18:07:26 | 显示全部楼层
输入函数
1.cin>>s
cin函数遇到空格、TAB、换行时读取结束。
缓冲区的空格等不会消失,但cin运用时会跳过这些空格,换行等
注意:最后的空格或换行不会消失,如果配合其他输入函数需要先getchar()
2.char ch=cin.get()和cin.get(char ch)
读取一个字符,遇到换行符结束
不会丢弃缓冲区里的空格和换行,即可以读取空格
3. cin.get(array,length)/最好不使用/
这个函数是从缓冲区读取字符串,其中array是字符串接受地址,length-1是字符串长度,因为最后一个字符必须存 储’\0’结束符,所以此函数只能接受length-1个字符。

可以读取空格,遇到换行符结束(此时换行符还在缓冲区里)

4.cin.getline(array,int length)
说明:接收一个长度为length-1的字符串,包括空格,遇到换行结束。
使用时前面的换行符会跳过
5. getline(cin,string s)
在C++中,应包含头文件,读取字符串包含空格,遇到换行结束,不包括换行
6. gets()函数
说明:接收输入的字符串,没有上限,但是要保证buffer足够大,以换行结束,并将换行符转化为’\0’。
7.getchar()函数
接收一个字符的输入,包含空格,遇到换行符结束。
可以读取换行符,空格
回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
 楼主| 发表于 2022-10-21 18:13:21 | 显示全部楼层
标准输出流(cout)
预定义的对象 cout 是 iostream 类的一个实例。cout 对象"连接"到标准输出设备,通常是显示屏。cout 是与流插入运算符 << 结合使用的,如下所示:

实例
#include <iostream>

using namespace std;

int main( )
{
   char str[] = "Hello C++";

   cout << "Value of str is : " << str << endl;
}
当上面的代码被编译和执行时,它会产生下列结果:

Value of str is : Hello C++
C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值。<< 运算符被重载来输出内置类型(整型、浮点型、double 型、字符串和指针)的数据项。

流插入运算符 << 在一个语句中可以多次使用,如上面实例中所示,endl 用于在行末添加一个换行符。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-12 21:04 , Processed in 0.054118 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表