0

これはしばらくの間私に問題を与えてきました、そして私がコードに加えた調整は違いを生まないようです。ファイルから読み取ったテキスト行の数字を見つけて、後で使用できるようにその数字を別の文字列に保存しようとしています。最初のコピーは成功したように見えますが、数字が格納されている文字列を出力しようとすると、出力は空白行だけになります。

コードとインクルードヘッダーファイルは次のとおりです。

#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

明らかに、それは期待通りに温度を出力していません。任意の支援やアドバイスをいただければ幸いです。

4

3 に答える 3

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これは(内側のループによって) 2つのsを出力しますcoutが、最終結果の文字列は1つだけになりますB。この理由はoperator[]、文字列を「拡張」しないためです。これは、その文字列の文字を置き換えるためのセッターとして使用できますが、すでに文字列に含まれているインデックスに対してのみ使用できます。場合によっては、その文字列に追加のメモリを割り当てません。インデックスオーバーフローの。

したがって、文字列を作成するには、別の演算子を使用できます- +=(連結の割り当て):

  string str;
  for (int i=0; i < 2; i++)
  {
    str += 'B';  
    cout << str[i] << endl;
  }
  cout << "And the final result is..." << str;

BB最終結果として出力されます。

于 2012-11-03T12:05:44.257 に答える
1

問題は、temp単純なchar配列ではないということです。std::stringクラスです。そして、最初tempは空です。これは、文字列に割り当てられたメモリの量がわからないことを意味します。0でもかまいませstd::string::operator[]ん。空の文字列に適用して使用する場合、どのシンボルを返す必要があるかを参照してください。

std::string::operator+=代わりに、またはchar配列を使用する必要があります。

于 2012-11-03T12:06:27.610 に答える
0


temp+=info1[i];
代わりにこれを使用してください
temp[count] = info1[i];

于 2012-11-03T11:59:54.830 に答える