关于读入不定数量的数据&&其他STL(主要是读入读出技巧)

笔记 同时被 3 个专栏收录
9 篇文章 0 订阅
10 篇文章 0 订阅
7 篇文章 0 订阅
1.while (scanf("%d",&input)!=EOF){
2.while((cin>>m)!=0)
3.但是在win下面好像不太好调试的样子?遇到这种情况我们怎么办?

回答是按下ctrl+F/ctrl+Z,就相当于直接给他了一个eof,就可以让它最后输出答案了。

一个好玩的库
isupper是判断是否是大写字母的系统函数,tolower是将其转换成小写字母的函数

isalnum()  如果参数是字母数字,即字母或者数字,函数返回true

isalpha()   如果参数是字母,函数返回true

isblank()   如果参数是水平制表符或空格,函数返回true

iscntrl()     如果参数是控制字符,函数返回true

isdigit()     如果参数是数字(09),函数返回true

isgraph()   如果参数是除空格之外的打印字符,函数返回true

islower()    如果参数是小写字母,函数返回true

isprint()      如果参数是打印字符(包括空格),函数返回true

ispunct()    如果参数是标点符号,函数返回true

isspace()   如果参数是标准空白字符,如空格、换行符、水平或垂直制表符,函数返回true

isupper()   如果参数是大写字母,函数返回true

isxdigit()     如果参数是十六进制数字,即09、a-f、A-F,函数返回true

tolower()    如果参数是大写字符,返回其小写,否则返回该参数

toupper()   如果参数是小写字符,返回其大写,否则返回该参数

一个很妙的函数void f7(){
string s1=“AAAbbb”;
transform(s1.begin(),s1.end(),s1.begin(),toupper);
cout<<“全部转化为大写:”<<s1<<endl;
transform(s1.begin(),s1.end(),s1.begin(),tolower);
cout<<“全部转化为小写:”<<s1<<endl;
}

结果:全部转化为大写:AAABBB;
全部转化为小写:aaabbb;

一个有用的函数find
1.find()

查找第一次出现的目标字符串:

#include

#include

using namespace std;

int main(){
string s1 = “abcdef”;

string s2 = “de”;

int ans = s1.find(s2) ; //在S1中查找子串S2

cout<<ans<<endl;

system(“pause”);

}

说明:如果查找成功则输出查找到的第一个位置,否则返回-1;

查找从指定位置开始的第一次出现的目标字符串:

#include

#include

using namespace std;

int main(){
string s1 = “abcdef”;

string s2 = “de”;

int ans = s1.find(s2, 2) ; //从S1的第二个字符开始查找子串S2

cout<<ans<<endl;

system(“pause”);

}

2.find_first_of()

查找子串中的某个字符最先出现的位置。find_first_of()不是全匹配,而find()是全匹配

#include

#include

using namespace std;

int main(){
string s1 = “adedef”;

string s2 = “dek”;

int ans = s1.find_first_of(s2) ; //在S1中查找子串S2

cout<<ans<<endl;

system(“pause”);

}

其中find_first_of()也可以约定初始查找的位置:s1.find_first_of(s2, 2) ;

3.find_last_of()

这个函数与find_first_of()功能差不多,只不过find_first_of()是从字符串的前面往后面搜索,而find_last_of()是从字符串的后面往前面搜索。

4.rfind()

反向查找字符串,即找到最后一个与子串匹配的位置

5.find_first_not_of()

找到第一个不与子串匹配的位置

一些好用的STL
std::string::reverse() 用于翻转模版,需要提供首尾迭代器作为参数,使用实例:reverse(s.begin(),s.end())
std::string::erase() 用于删除区间的字符片段,传入两个迭代器l与r,用于删除区间[l,r)[l,r)的范围内的字符。使用实例:s.erase(s.end()-5, s.end())
std::string::susbstr() 用于提取字符串,使用的区间范围同样是[l,r)[l,r)的,使用例子:s.substr(s.find(’’)+1) 提示:其中一个参数表示,从此处到字符串结尾。
std::string:find()用于查找子字符串在母串中的第一个出现的位置,并返回一个int型的位置,使用例子:s.find(subs, beta+1),表示从位置beta继续向后寻找子串,并返回找到的第一个子串的位置,另外若无法找到时,采用string::npos作为查找失败的结果,若判断使用>=0>=0无法成功判断,举例:

如何反转?用 STL 中的 std::reverse()。
如何去掉前导零?先遍历一遍字符串,看看有多少前导零,然后 std::string::erase() 即可。
如何提取出子字符串?std::string::substr()
atoi  //将字符串直接转换为int
strncpy函数用于将指定长度的字符串复制到字符数组中,是C语言的库函数之一,来自 C语言标准库,定义于string.h。语法形式为:char *strncpy(char *dest, const char *src, int n),表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。[1][2]
	printf("%0*d",p,a[i]);//输出p位,不足补零 
	 cout<<setw(3)<<a[i];//输出,场宽为三
  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值