-4

我的程序要求用户输入一个 int 值。我需要应用程序在“”标记内插入输入的 int 值,使其成为字符串值,从而使我能够使用字符串值保存 txt 文件。

例子:

用户输入 int:123 程序添加引号:“123”所以新字符串的值为:“123”

我现在可以使用新的字符串值以该字符串作为文件名来保存文件。

没有引号 ifstream 不允许我保存文件。

提前致谢

4

2 回答 2

3

你不必那样做。您可以将“数字”直接保存为字符串:

// 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

当然,您应该有一些中间步骤来进行一些输入验证。

于 2013-05-27T06:31:05.693 回答
1

这里的引号几乎是一条红鲱鱼。对于您要完成的工作,它们既不是必要的,也不是充分的。

你有几个选择。一种是将用户的输入读取为字符串而不是算术类型:

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,因此该部分需要进行简单的重写才能使用它。

于 2013-05-27T06:33:14.137 回答