如何将变量与字符串值组合在一起

时间:2011-10-15 12:52:24

标签: c++

我想在(ofstream)文件路径

中将变量与字符串值组合在一起

示例:

long phNumber;
char bufPhNumber[20];
ofstream ifile;

cout << "Phone Number: ";
cin >> phNumber;
itoa(phNumber,bufPhNumber,20);

ifile.open("c://" + bufPhNumber + ".txt",ios::out);  // error in this line

如何将此变量(bufPhNumber)与该字符串组合(“c://”+此处变量+“。txt”)

3 个答案:

答案 0 :(得分:4)

这样做:

ifile.open((std::string("c://") + bufPhNumber + ".txt").c_str(),ios::out);  

说明:

它首先创建一个字符串,并使用operator+()将其余的c字符串连接为:

std::string temp = std::string("c://") + bufPhNumber + ".txt";
然后

c_str()传递给.open()

ifile.open(temp.c_str(),ios::out);  

但是,在C ++ 11中,您不需要执行.c_str(),并且可以直接使用std::string


更好的解决方案应该是:

std::string phNumber; //declare it as std::string

cout << "Phone Number: ";
cin >> phNumber; //read as string

         //use constructor
ofstream ifile(("c://" + phNumber + ".txt").c_str(), ios::out);  

答案 1 :(得分:1)

ofstream::open,至少在C ++ 11 (a)之前,需要const char *作为文件名,而不是std::string,按{ {3}}

而不是:

ifile.open("c://" + bufPhNumber + ".txt",ios::out);

使用以下内容:

string fspec = std::string ("c://") + bufPhNumber + ".txt";
ifile.open (fspec.c_str(), ios::out);

(您可能想要考虑为什么输出文件被称为ifile)。


(a)在C ++ 11中,open两个 basic_ofstream函数:

void open(const char* s, ios_base::openmode mode = ios_base::out);
void open(const string& s, ios_base::openmode mode = ios_base::out);

所以string版本可以在那里工作。

答案 2 :(得分:-1)

好的,嗨。你不能像java一样直接连接字符串,所以你的问题就在这里:

  

bufPhNumber +“。txt”

鉴于bufPhNumber是char *而text是char *,它们不支持你想要的+运算符。

这样的作业有strcat(),但它假定目标字符串有足够的空间容纳目标字符串,并且它还修改了目标字符串。

char Array[28]; //One for the null
strcat(Array,"C:\\");
strcat(Array,bufPhNumber);
strcat(Array,".txt");

虽然我建议使用char数组作为电话号码,因为它不太适合这样的存储,因为它不能容纳任意数量的数字(你可以考虑使用两个整数/长)。另外,请考虑使用unsigned long(因为您没有获得负数电话号码)。如果使用long / int,请注意从long转换为char数组,将char数组转换为long将占用大量内存和处理能力,这比使用char数组效率更低。