用户输入以空格分隔的字符串。代码运行一个排列并将文件导出到.csv文件中。问题是C ++输出窗口中的代码输出与.csv文件中的代码格式不匹配。 .csv文件中的代码是C ++输出窗口的一个大字符串。 .csv输出不考虑代码输出中的单独行。
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
cout << "Type in string (separate by spaces).\n" << endl;
int r;
string t;
getline(cin, t);
/* Put the line in a stringstream and extract word by word back */
istringstream iss(t);
string words;
vector<string> n;
while (iss >> words) {
n.push_back(words);
}
std::ofstream output_file;
output_file.open("C:/Users/UserName/Documents/output2.csv");
cout << "\n";
int ctr;
for (ctr = 0; ctr < n.size(); ctr++){
do {
for (auto i = n.begin(); i != n.end() - ctr; ++i)
std::cout << *i << ' ';
cout << endl;
for (auto i = n.begin(); i != n.end() - ctr; ++i)
output_file << *i << ' ';
} while (std::next_permutation(n.begin(), n.end()));
}
output_file.close();
system("pause");
}
以下是C ++输出窗口的输出:
I like strawberries
I like strawberries
I strawberries like
like I strawberries
like strawberries I
strawberries I like
strawberries like I
I like
I strawberries
like I
like strawberries
strawberries I
strawberries like
I
I
like
like
strawberries
strawberries
这是.csv Excel文件输出(全部在单元格a1中):
I like strawberries I strawberries like like I strawberries like strawberries I strawberries I like strawberries like I I like I strawberries like I like strawberries strawberries I strawberries like I I like like strawberries strawberries
我的最终目标是让.csv文件中的C ++输出窗口相同。当我手动将代码复制并粘贴到.csv文件中时,这种方法很有效,但这对于大字符串来说是不切实际的。
答案 0 :(得分:0)
您的问题是在正确的位置缺少换行符。你需要写出当前排列的所有单词,然后(当你完成了&#34;句子&#34;)一个新行,将那个单词与下一个单词分开。
只写出完整单词集的排列(并且您的测试用例是硬编码的)的简化版本看起来像这样:
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
istringstream iss("I like strawberries");
vector<string> n { std::istream_iterator<std::string>(iss), { } };
std::ofstream output_file("c:/c/source/output2.csv");
std::sort(n.begin(), n.end());
do {
for (auto const &s : n)
output_file << s << ' ';
output_file << "\n";
} while (std::next_permutation(n.begin(), n.end()));
}
请注意添加对std::sort
的调用。这是std::next_permutation
在正确的时间返回false
所必需的(当下一个排列将项目按排序顺序排列时,它返回false,因此当且仅当它被排除时,您将获得所有排列在第一次调用之前按排序顺序)。碰巧的是,您的测试用例开始排序,但一般情况下您不能依赖它。
使用Excel快速测试显示这个开头有一个&#34;句子&#34;每个细胞。