这是我上一个问题的后续内容。
Parsing file names from a character array
答案是相关的,但我仍然遇到麻烦。当字符串被拆分时,我似乎无法将它们作为字符串或cstring正确输出到我的错误日志中,说实话,我不完全理解他的答案是如何工作的。那么,是否有人对绅士提供的答案有进一步的解释。如何将字符数组拆分为更多的字符串,而不是将它们全部写出来。这就是答案。
std::istringstream iss(the_array);
std::string f1, f2, f3, f4;
iss >> f1 >> f2 >> f3 >> f4;
想象一下,我有30个不同的字符串。当然,我不能写f1,f2 .... f30。
有关如何执行此操作的建议吗?
答案 0 :(得分:3)
你甚至可以避免使用显式for循环,并尝试一种对现代C ++更自然的方法。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <iterator>
int main()
{
// Your files are here, separated by 3 spaces for example.
std::string s("picture1.bmp file2.txt random.wtf dance.png");
// The stringstream will do the dirty work and deal with the spaces.
std::istringstream iss(s);
// Your filenames will be put into this vector.
std::vector<std::string> v;
// Copy every filename to a vector.
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter(v));
// They are now in the vector, print them or do whatever you want with them!
for(int i = 0; i < v.size(); ++i)
std::cout << v[i] << "\n";
}
这是处理“我有30个不同字符串”这样的场景的明显方法。将它们存储在某处,std :: vector可能是合适的,具体取决于您可能想要对文件名执行的操作。这样你就不需要给每个字符串命名(f1,f2,...),你可以根据需要通过向量的索引来引用它们,例如。