无法输出复制的字符串

时间:2012-11-03 11:53:46

标签: c++ string

这已经给我带来了一段时间的麻烦,我对代码所做的任何调整似乎都有所作为。 我试图找到从文件读取的文本行中的数字,并将所述数字存储到另一个字符串中以便稍后使用。初始复制似乎成功,但在尝试输出数字存储的字符串时,唯一的输出是一个空行。

以下是代码和包含的头文件:

#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 。 任何帮助或建议将不胜感激。

3 个答案:

答案 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];