C++取出string的一部分以及int型转成string类型
在实际应用中,对文件的操作是十分频繁的,我们需要对文件进行拷贝,重命名等操作,这是就需要获取文件的绝对路径,一般情况下,该路径是以字符串的形式存储的,如果我们需要对文件进行重命名等,就需要对绝对路径这个字符串进行处理,比如获取这个字符串的某个位置中的一个子字符串等,本片博客针对今天用到的部分字符串的操作函数进行记录,以便以后再次用到的时候查阅使用,同时,我在写程序的过程中也参考了许多网上的博客等资料,希望自己的记录有朝一日也可以帮助到其他人。
首先在windows系统下,采取以下的命令,可以将当前文件夹下以及子文件夹下的所有jpg文件的绝对路径写到temp.set文件之中,那么我们就可以依次读取set文件中的每一行来获取每个jpg的文件名,如下所示的例子,那么接下来就是对于这个字符串的处理了。
dir *.jpg /b/s > tmp.set
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.416333_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.416405_19.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.416566_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.416878_17.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.417536_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.417708_21.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.417795_21.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.418242_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.418536_7.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.418560_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.418647_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.418717_21.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.418840_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.419457_14.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.419584_21.jpg
D:\VideoRetrieval测试结果\result_case2\-1_[,,,].jpg\all_result\.419691_14.jpg
首先需要将该文件读入至内存中,如下所示,可以定义一个string的vector,然后首先将文件的绝对路径读入至一个char型的数组中,在读入的时候需要注意,要跳过空行,以及要将读取的每一行最后的换行符除掉,换成'\0'以标志该字符串的结束,由于windows系统的换行符是\r\n,因此需要将\n与\n一次去掉,并添加上'\0',然后将转换好的字符串pushjinruvector中。
std::vector<std::string> vecRes;
FILE*pfin = fopen(strFN.c_str(), "rb");
char as8Buf[] = {};
while(NULL != fgets(as8Buf, , pfin))
{
if(as8Buf[strlen(as8Buf)-] == '\n')
{
as8Buf[strlen(as8Buf)-] = '\0';
}
if(as8Buf[strlen(as8Buf)-] == '\r')
{
as8Buf[strlen(as8Buf)-] = '\0';
} if (strlen(as8Buf) == )
{
continue;
}
vecRes.push_back(as8Buf);
}
fclose(pfin);
可以通过如下的语句获取绝对路径中最后的文件名
int pos = strFullName.rfind("\\");
std::string fn = strFullName.substr(pos + , strFullName.length());
string中的rfind是反向查找第一个"\\"这里第一个\是转义字符,也就是找"\"然后将其所处的位置返回,然后在利用string的substr函数将该位置直至最后的子字符串返回。还可以循环调用上述的函数来获取上n层的文件夹的名称,但是需要注意好边界条件的判断,考虑到n的各种取值情况,做好if else的判断。
另外,有时文件名中需要有一些数据信息,比如得分值、ID号等,那么此时就会涉及到字符串与int以及float等类型之间的转换,这种转换十分经非常用到,但是每次用的时候都要重新去查,这次记录下来,只记录了我采取的方式:
float型转string:
std::to_string(video_ID)
string转float:
float curScore = atof(strScore.c_str());
都需要将#include <string>头文件包含在内。
C++取出string的一部分以及int型转成string类型的更多相关文章
- VB中将INT型转换成STRING和从STRING转换成INT型的函数
CStr 函数示例本示例使用 CStr 函数将一数值转换为 String. Dim MyDouble, MyStringMyDouble = 437.324 ' MyDouble 为 Double ...
- double型转换成string型
double型转换成string型 题目描写叙述: 如有一个函数.其可接受一个long double參数,并将參数转换为字符串.结果字符串应保留两位小数,比如,浮点值123.45678应该生成&quo ...
- 如何将int整型转换成String字符串类型
自动类型转换适用于兼容类型之间从小范围到大范围数据的转换. nt转换成String int i = 10; int b=1: System.out.pritnln(a + b); 里面靠近字符串,所以 ...
- oracle.sql.Clob类型转换成String类型
方法一: public String ClobToString(Clob clob) throws SQLException, IOException { String reString = &quo ...
- Clob类型转换成String类型
oracle中表结构如下: create table GRID_RESOURCE ( ID VARCHAR2(50), CNNAME VARCHAR2(50), TYPE VARCHAR2(50), ...
- CLOB型转成字符型
//oracle.sql.Clob类型转换成String类型 public static String ClobToString(Clob clob) { String reString = &quo ...
- oracle Clob类型转换成String类型
转载:https://www.cnblogs.com/itmyhome/p/4131339.html Clob类型转换成String类型 oracle中表结构如下: create table GRID ...
- C字符串和C++中string的区别 &&&&C++中int型与string型互相转换
在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作.以下是C字符串和C++中string的区别: C字符串 string对象(C++) 所需的头文件名称 ...
- C# 中怎么将string转换成int型
int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.ToInt32(str);以上都可 ...
随机推荐
- Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope
以下内容摘自部分网友的,并加上了自己的理解 @Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action.Sp ...
- C# 验证给定的字符串形式的日期是否合法
用于验证日期的有效性,对于用户输入的不规则日期也作了简单处理,比如用户输入了“今天”,则代码会认为用户要返回的是今天的日期,另外可以对纯数字的日期进行解析,比如:20130906 /// <su ...
- Spark学习笔记——Spark Streaming
许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用, 还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它允许用户 ...
- 卡通渲染Shader
http://www.opengpu.org/forum.php?mod=viewthread&tid=17071http://www.opengpu.org/bbs/forum.php?mo ...
- [JS] Topic - Object.create vs new
故事背景 Ref: 你不知道的javascript之Object.create 和new区别 var Base = function () {} (1) var o1 = new Base(); (2 ...
- CentOS7 设置软件镜像源
Linux拥有众多的发行版,每个发行版都有提供镜像,但是,在国内这些镜像的下载速度参差不齐,偶尔会有更新失败的情况. 网上众多推荐的镜像源为163的镜像,笔者通过一段时间的试用,发现某些小众带宽访问1 ...
- ASP.NET MVC 4 (十三) 基于表单的身份验证
在前面的章节中我们知道可以在MVC应用程序中使用[Authorize]特性来限制用户对某些网址(控制器/控制器方法)的访问,但这都是在对用户认证之后,而用户的认证则依然是使用ASP.NET平台的认证机 ...
- mysql学习之索引
首先,看一个例子,有一张大表,记录数超过1000,SELECT * FROM student WHERE name='xinan'; 如果没有索引,查找程序就得从头查找,很费时间,表越大越费时间.建立 ...
- [c#基础]使用抽象工厂实现三层 和反射
引言 昨天加了一天班,今天闲来无事,就在想如何将之前的三层和最近一直在学的设计模式给联系在一起,然后就动手弄了个下面的小demo. 项目结构 项目各个层实现 Wolfy.Model层中有一个抽象类Ba ...
- AtCoder Beginner Contest 070|Elena|8.12|#471
打了场beginner的AtCoder,也是我第一次打AtCoder,虽然AK了,但是由于手速慢+撒比,才#471… 比赛链接:https://beta.atcoder.jp/contests/abc ...