2015-03-19 3 views
-3

У меня есть .txt файла, как показано ниже:Чтения части строки из текстового файла в C++

Peter He is a boy. 

Mary She is a girl. 

Tom  It is a cat. 

... 

Я хотел бы прочитать файл с помощью c++ и сохранить имена в массив строки name[] и магазина описания в другой массив строки description[], но без fullstop ".".

Имена и описания разделены вкладкой.

Как я могу это сделать?

+0

Если у вас еще нет решения Google, попробуйте. Вы можете начать с http://stackoverflow.com/questions/236129/split-a-string-in-c – VolAnd

+0

вы вообще что-то пробовали? прежде чем спрашивать, как это сделать? – Pandrei

+0

Пожалуйста, покажите нам, что вы пробовали, чтобы мы могли помочь вам исправить его. –

ответ

-1

Предполагая, что вы уже знаете, как читать целую строку текстового файла, вы можете разграничить текст определенным символом (я использую ',' много).

Например, вы можете прочитать первую строку в «Питер, он мальчик». но если бы вы установили его как разделительную строку, это может выглядеть так: «Питер, он мальчик». то вы можете прокручивать каждый символ строки до определенного символа в вопросе = ',', и затем вы можете разбить строку соответствующим образом.

Нечто подобное может то, что вы ищете:

#include <string> 
#include <sstream> 
#include <vector> 

int main() 
{ 
    vector<string> lines(3); 
    vector<string> names(3); 
    vector<string> descriptions(3); 
    lines.at(0) = "Peter,He is a boy."; 
    lines.at(1) = "Mary,She is a girl."; 
    lines.at(2) = "Tom,It is a cat."; 

    for(int i = 0; i < lines.size(); i++) { 
     for(int j = 0; j < lines[i].size(); j++) { 
      if(lines[i][j] == ',') { 
       for(int d = 0; d < j; d++) { 
        stringstream ss; 
        ss << lines[i][d]; 
        ss >> names.at(i); 
       } 
       for(int d = j + 1; d < lines[i].size(); d++) { 
        if(lines[i][d] != '.') { 
         stringstream ss; 
         ss << lines[i][d]; 
         ss >> descriptions.at(i); 
        } else { 
         break; 
        } 
       } 
       break; 
      } 
     } 
    } 
} 

EDIT: Этот код будет выглядеть на 3 пространств вместо одного символа «».

#include <string> 
#include <sstream> 
#include <vector> 

int main() 
{ 
    vector<string> lines(3); 
    vector<string> names(3); 
    vector<string> descriptions(3); 
    lines.at(0) = "Peter,He is a boy."; 
    lines.at(1) = "Mary,She is a girl."; 
    lines.at(2) = "Tom,It is a cat."; 

    for(int i = 0; i < lines.size(); i++) { 
     for(int j = 0; j < lines[i].size(); j++) { 
      if(lines[i][j] == 0x20 && lines[i][j + 1] == 0x20 && lines[i][j + 2] == 0x20) { 
       for(int d = 0; d < j; d++) { 
        stringstream ss; 
        ss << lines[i][d]; 
        ss >> names.at(i); 
       } 
       for(int d = j + 3; d < lines[i].size(); d++) { 
        if(lines[i][d] != '.') { 
         stringstream ss; 
         ss << lines[i][d]; 
         ss >> descriptions.at(i); 
        } else { 
         break; 
        } 
       } 
       break; 
      } 
     } 
    } 
} 

Также маленький совет не вниз голосовать ответ, который на самом деле работает только потому, что это не быстрое решение вы надеялись, или вы этого не понимаете ..

+0

Есть ли какой-либо метод, который может разделять строку на две строки без добавления ','? Или есть метод, который читает строку два раза и каждый раз назначая имя или описание в массив строк? Sth like: fin >> name [i]; getline (fin, описание [i]); –

+0

Ну теоретически делимитация может быть любой, даже набор пространств в исходной строке может быть использован, но использование «,» просто проще. – sp10acnFIFO

+0

@JackieCheung Я обновил ответ, чтобы помочь с вашими исходными данными. Если это считается достаточным ответом на ваш вопрос, вы должны пометить его как ответ, нажав на отмеченный галочкой слева от ответа, чтобы он был зеленым. – sp10acnFIFO

0

Я только знаю, как прочитайте целую строку или слово.

Это то, что я написал:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main(){ 
    string line[6153]; 

    ifstream fin; 
    fin.open("dict.txt"); 
    if (fin.fail()){ 
     cout << "File input failed.\n"; 
     exit(1); 
    } 

    else{ 
     int i; 
     for (i = 0; i < 6153; i++){ 
      getline(fin, line[i]);  
     } 
    } 
    fin.close(); 
    return 0; 
} 

P.S. в «dict.txt» есть 6153 строки.

+0

Как вы знаете, что текстовый файл содержит 6153 строки? –

Смежные вопросы