这已经给我带来了一段时间的麻烦,我对代码所做的任何调整似乎都有所作为。 我试图找到从文件读取的文本行中的数字,并将所述数字存储到另一个字符串中以便稍后使用。初始复制似乎成功,但在尝试输出数字存储的字符串时,唯一的输出是一个空行。
以下是代码和包含的头文件:
#include<iostream>
#include<string>
#include<fstream>
#include<cctype>
using namespace std;
int main()
{
ifstream inFile;
string temp;
short count = 0;
char fileName[20];
string info1;
cout << "Enter the name of the file to be used: " << endl;
cin >> fileName;
inFile.open(fileName);
if(!inFile)
{
cout << "Error opening file." << endl;
}
else
{
getline(inFile, info1);
cout << info1 << endl;
for(short i = 0; i < info1.length(); i++)
{
if(isdigit(info1[i]))
{
temp[count] = info1[i];
cout << temp[count] << endl;
count++;
}
}
cout << temp << endl;
}
inFile.close();
return 0;
}
输出如下:
Enter the name of the file to be used:
input.txt
POPULATION SIZE: 30
3
0
显然,它没有按预期输出 temp 。 任何帮助或建议将不胜感激。
答案 0 :(得分:1)
实际上,它 输出temp
值 - 只有这个值是一个空字符串。考虑一下:
string str = "A";
for (int i=0; i < 2; i++)
{
str[i] = 'B';
cout << str[i] << endl;
}
cout << "And the final result is..." << str;
这将输出两个B
s(由内循环的cout
),但最终结果的字符串将只有一个B
。原因是operator[]
没有“扩展”一个字符串 - 它可以用作替换字符串字符的setter,但仅用于已经在字符串中的索引:它不会分配额外的内存在索引溢出的情况下为该字符串。
因此,要构建字符串,您可以使用另一个运算符 - +=
(连接分配):
string str;
for (int i=0; i < 2; i++)
{
str += 'B';
cout << str[i] << endl;
}
cout << "And the final result is..." << str;
这将打印BB
作为最终结果。
答案 1 :(得分:1)
问题是temp
不是简单的char数组。它是std::string
类。最初temp
是空的。这意味着我们不知道为字符串分配了多少内存。它甚至可以为0.因此,当您使用std::string::operator[]
应用于空字符串时,应该返回应该返回的符号吗?
您应该使用std::string::operator+=
或char数组。
答案 2 :(得分:0)
使用此,
temp+=info1[i];
而不是
temp[count] = info1[i];