我的程序要求用户输入一个 int 值。我需要应用程序在“”标记内插入输入的 int 值,使其成为字符串值,从而使我能够使用字符串值保存 txt 文件。
例子:
用户输入 int:123 程序添加引号:“123”所以新字符串的值为:“123”
我现在可以使用新的字符串值以该字符串作为文件名来保存文件。
没有引号 ifstream 不允许我保存文件。
提前致谢
你不必那样做。您可以将“数字”直接保存为字符串:
// read input
std::string input;
std::cin >> input;
// open output file with input as name
std::ofstream output_file(input.c_str()); // c_str() not needed in C++11
当然,您应该有一些中间步骤来进行一些输入验证。
这里的引号几乎是一条红鲱鱼。对于您要完成的工作,它们既不是必要的,也不是充分的。
你有几个选择。一种是将用户的输入读取为字符串而不是算术类型:
std::string fname;
std::cout << "Please enter integer for file name: ";
std::getline(std::cin, fname);
std::fstream file(fname);
另一种是将数字输入为整数,然后将其转换为字符串:
int fnum;
std::cin >> fnum;
std::string fname = std::to_string(fnum);
std::fstream f(fname);
很有可能你会想要添加一个文件扩展名,所以如果用户输入123
,你的文件名最终会是 (say) 123.txt
。为此,您可以执行以下操作:fname += ".txt";
就在您创建 fstream 对象之前。
编辑:
这是一个完整/可编译的演示,用 VC++ 2012 测试:
#include <string>
#include <iostream>
#include <fstream>
int main() {
int fnum;
std::cout << "Please enter integer for file name: ";
std::cin >> fnum;
std::string fname = std::to_string(fnum);
fname += ".txt";
std::ofstream f(fname);
f << "Contents";
}
运行它并输入(例如)123
,我得到一个名为123.txt
“Contents”的文件。
大致相似的代码也适用于 g++ 4.7.2,但(至少我拥有的副本)还不包括在内std::to_string
,因此该部分需要进行简单的重写才能使用它。