STL---string
好博客:https://blog.csdn.net/lsh_2013/article/details/46728993
https://www.cnblogs.com/engraver-lxw/p/7581540.html
首先你看到这样一个输入如何办?
用scanf
scanf ("%d:%d:%d - %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);
scanf的格式化输入可以帮助我们去除出一下东西
用cin
要注意的是cin遇到空格和回车就不读了
如果这里用string来读,这里我们一行要用3个string
cin>>str1>>str2>>str3
str2是“-”
注意vector<string>q
sort(q.begin(),q.end());
字符串这里是可以直接排序的,同时还可以直接用< = >,比较大小
原理是每一个字符串每一次都取其中一位字符下来进行比较
来聊聊字符串拼接的问题:
c++中 cout<<"abc"+"def"<<endl;
这是会报错的,不允许两个const char *进行拼接
这里这两个字符串并不是string型的
要首先声明string str1="abc",str2="bcd"
str1+str2
str1+'a' (直接加字符)
str1+"a" (直接加字符串)
都是可以的
但是不能直接加 int 等类型
如 str1+1 是会报错的
还有string 上的函数substr
str.substr(0,5)
含义为从下标0开始,往后取5个字符
string str;
我们用getline(cin,str)来读取一行
用str.find(substr)来查找子串
如果找到返回第一次出现的字母下标
否则返回-1
c++ 中通过to_string()函数可以将实现string 的转变
来讨论一下c++与c如何进行格式化输入
在面对这样的输入时,我们可以直接用scanf进行格式化输入
没有必要用字符串来保存上述输入
但是遇到了如下情况阁下又如何应对?
这个输入没有上述那个输入如此有规律,我们不能再用scanf来偷懒了
假设现在我们的目的是一行一行处理,比如3-13 , 13 - 17
我们需要得到3,13,13,17出来,应该如何得到?
下面我们简化问题,只来讨论每一行如何处理:
首先用getline(cin,str) 以字符串的形式来保存这一行数据
然后肯定需要将“,”都去掉
在c中有一种格式化输入的方法sscanf(str,"%s,%s",t1,t2)
可惜的是sscanf中的str是char*类型
如何将string类型转换为char*类型呢?可以用函数转化,但是我认为这样处理不太优雅
在c++中有一种格式化输入的方法
istringstream iss(str)
这个函数是将str这个string类型的数据转换为流
然后可以通过getline(iss,t,',') 来格式化输入
这里说明下getline函数:---->这里有一个好博客
根据上述博客中内容我们的iss是输入流,t是保存流中信息的字符串,‘,’是截断符
来讨论下c++string中的一些函数
find函数
字符串转数字函数itor
一个好博客<----
来讨论下c++/c中文件的使用方法
文件的打开
输入文件 :ifstream filename(filepath);
输出文件:ofstream filename (filepath);
filename.is_open()
成功返回为true,否则为false
文件的关闭
filename.close()
从文件中读取
getline(filename,str)
然后操作可以与上述字符串处理一样
到文件中写
filename<<str<<endl