持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
获取字符串的不同方式
1.c++
通过找所需分割的字符标志,可以通过find 函数来获取当前分隔符的位置,在找到位置后通过 substr *截取指定位置的字符串,这里一定注意的是第二个参数是指他所需要获取的长度,一定要注意不是他的目的位置,在这里跌了大坑。还要注意的是再循环结束后,原字符串中还有一些数据需要复制出来否则最后的字符串截取不完整。
size_t pos = srcStr.*find*(“.”);//获取截取位置
std::string addedString = "";
while (pos != std::string::npos)
{
addedString = srcStr.*substr*(0, pos);//将指定位置的字符串复制出来
if (!addedString.*empty*() || !repeatedCharIgnored)
{
resultStringVector.*push_back*(addedString);
}
srcStr.*erase*(srcStr.*begin*(), srcStr.*begin*() + pos + 1); //删除已经截取的字符
pos = srcStr.*find*(delimStr.*at*(0));
}
//最后一个的位置已被删除 但是里面还有内容,需要将剩余的内容添加到字符串集中
addedString = srcStr;
if (!addedString.*empty*() || !repeatedCharIgnored)
{
resultStringVector.*push_back*(addedString);
}
2.使用split方式 将字符串分割并存储。
vector vec = split("hello,world,c++", ',');
这个方法要比上面的方法方便很多,它在使用过程中也比较普遍。
_split(s, vec, elems);
两种的差别就是第一个是直接返回的是容器 第二个他是传进去了容器,在内部直接赋值。
3.section 它所使用的是QString类型
m_str.section(",",i,i);
m_str = "hello,world,c++"
第一个参数是需要截取的标志,第二第三个参数是用来这是截取的范围,注意 不是截取的长度
如果m_str.section(",",0,0); 他代表的是 从发现“,”的第0个位置开始,到第0个位置结束 他这里的结果就是“hello”
如果m_str.section(",",0,1); 他的结果是“hello,world”
在截取之后 需要删除已经获取的内容,m_str.mid(4),这里的参数是他所需要删除的字符长度,他和erase 的使用不同, erase 删除给的是指定的位置,而 mid 是从 0 位置开始。