2016-09-08 10 views
1

私は学校のプロジェクトに取り組んでおり、ファイルからテキストを読み込む必要があります。c-stringを使用して.txtファイルを読み取る方法は?

私の教授がプロジェクトに制限をかける以外、簡単peasyサウンズ:NO STRINGS (「いいえ文字列データ型や文字列ライブラリが許可されません。」)

私はこの問題を回避なってきましたchar配列を使ってしかし、char配列を使ってファイルから読み込む方法がわかりません。


これは文字列を含むファイルで読む方法については、別のWebサイトからです。

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string line; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    while (getline (myfile,line)) 
    { 
     cout << line << '\n'; 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

ここで重要な行はwhile (getline (myfile,line));

getlineではifstreamとストリング(ない文字列)を受け付けます。

ご協力いただきましてありがとうございます。

+0

をあなたが必要なのです結果何場合は、単に空の文字列「」または何も会うNO STRINGS、出口を出る? – vinllen

+0

@vinllenここでルールを引用します: "文字列データ型または文字列ライブラリは使用できません。" –

+0

インストラクターが実際にそれをすべて大文字にして、明示的に 'std :: vector'を使うことができないと言っていないなら、私は' std :: vector'を使います。 http://stackoverflow.com/questions/4761529/efficient-way-of-reading-a-file-into-an-stdvectorchar –

答えて

4

cin.getlineを使用してください。フォーマット:cin.getlineについては、このサイトを参照してください。

あなたはこのような何かを書くことができます。

ifstream x("example.txt"); 
char arr[105]; 
while (x.getline(arr,100,'\n')){ 
    cout << arr << '\n'; 
} 
1

ifstreamは、ファイルの内容をcharアレイに読み込むget()というメソッドを持っています。 get()は、パラメータとして配列へのポインタと配列のサイズをとります。可能であれば、指定されたサイズまで配列を塗りつぶします。

get()が返された後に、gcount()メソッドを使用して、読み取られた文字の数を判断します。

次に、単純な論理ループを使用して、size -chunksのファイルの内容をアレイに繰り返し読み込み、読み取られたすべてのチャンクを1つのアレイまたはstd::vectorに収集できます。

0

は、テキスト入力の終了を判断するためにint i = 0; while (scanf("%c", &str[i ++]) != EOF)を使用することができます。 strはあなたが望むキャラクタ配列のインクルード改行文字で、iが入力サイズです。

また、C++スタイルで行ごとにすべてのループを読み取るためにwhile(cin.getline())を使用することができます。 istream& getline (char* s, streamsize n, char delim);すぐ下のように:

const int SIZE = 100; 
const int MSIZE = 100; 
int main() { 
    freopen("in.txt", "r", stdin); 
    char str[SIZE][MSIZE]; 
    int i = -1; 
    while (cin.getline(str[++ i], MSIZE)) { 
     printf("input string is [%s]\n", str[i]); 
    }  
} 
+0

を使用する必要があります。正確に 'istream&getline(char * s、streamsize n、char delim);' go ?私はちょっと混乱している –

+0

答えはすでに更新されています – vinllen

関連する問題