我正在制作一个C ++程序,该程序从电话列表中获取电话并从其中创建vCard文件。但是我在将电话复制到文件时遇到问题,这是模板的字符串替换。我该如何解决?
我已经尝试在该网站上寻找一些解决方案,但是它们都不是关于ofstream的,这就是我正在使用的解决方案。
int main()
{
string fileDest;
string vCardTemp = "BEGIN:VCARD\nVERSION:3.0\nTEL;TYPE=WORK,MSG: phonehh\nEND:VCARD\n";
cout << "Input file destination...\n";
cin >> fileDest;
cout << "Analyzing data...";
ifstream inFile;
inFile.open(fileDest);
if (!inFile)
{
cout << "Error! File doesn't exist or can't be opened.";
cin.ignore();
exit(0);
}
cout << "File found. Dissecting...";
string line;
string finalvCard = "";
string copy = vCardTemp;
while (getline(inFile, line))
{
istringstream iss(line);
copy.replace(copy.find("phonehh"), 7, line);
//finalvCard += copy;
finalvCard.append(copy);
cout << " - " + line + " written to vCard.\n";
}
cout << "\n\nFinished vCard conversion. Where do we store this (include filename)?\n";
string dest;
cin >> dest;
ofstream file(dest);
file << finalvCard;
cout << "File stored! Cya!\n";
return 0;
}
答案 0 :(得分:3)
这是另一个问题的重复:C++ simple string replace, non complicated code, but producing crazy error
@Billy ONeal有一个很好的解释,我将在这里重复:
如果str.replace(str.find(sought), sought.size(), replacement);
找不到要查找的内容,那么str.find()
是错误的。 str.find()
将返回str::npos
,它将不是字符串中的有效位置。因此,替换调用失败,并显示索引超出范围异常。