2015-12-12 3 views
1

мой файл input.txt:Как проверить пустые линии?

4 

4 

5 0 1 2 
1 4 0 0 
1 1 5 4 
0 6 3 2 

0 4 1 2 
1 7 5 0 
2 3 5 6 
0 6 2 2 

1:0 4 2 0 

моя программа сейчас:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <stdlib.h> 
#include <sstream> 
using namespace std; 

int main() 
{ 
ifstream File("input.txt"); 
string line; 
string num; 
string array[50]; 
string comma; 
int i=0; 
    while (getline(File,line)) { 

     comma=""; 
     istringstream s(line); 

     if (line.empty()){ 

      comma=","; 
      s >> num ; 
      array[i] = comma; 
     } 

     else { 
      s >> num ; 
      array[i] = num; 
     } 
     i++; 

    }   
return 0; 
} 

хорошо, моя программа не дает мне то, что я хочу! когда я печатаю массив [i], он дает мне только числа в первом столбце! как это:

4 
, 
4 
, 
5 
3 
1 
7 
, 
0 
1 
2 
6 
, 
1:0 

то, что я хочу сделать, это поставить запятую, где когда-либо есть пустая строка, так что я могу различать между этими числами и хранить их внутри intger массива сделать математические операции между ними.

объяснить мой input.txt файл:

число и размер матрицы внутри входного файла может быть изменен мной.

4 <= #number of items 

4 <= #types of items 

5 0 1 2 <= matrix #1 
1 4 0 0 
1 1 5 4 
0 6 3 2 

0 4 1 2 <= matrix #2 
1 7 5 0 
2 3 5 6 
0 6 2 2 

1:0 4 2 0 <= Available numbers for item #1 

и я хочу:

  1. магазин число элементов внутри переменной.

  2. хранить типы предметов внутри переменной.

  3. магазин матрица # 1 и матрица # 2 внутри 2 массивов и делать Вычитание между матрицей # 1 и # 2 матрицы.

Это можно сделать? или есть ли более простой способ различать эти числа и хранить их внутри переменных и межсетевого массива?

+1

Может ваши входные линии прекращается в '\ r \ n' (т. е. окончания строки Windows)? – clcto

+0

Вы говорите, что это не дает вам то, что вы хотите, но вы не говорите, что это ** дает вам. Я подозреваю, что проблема заключается в том, что вы никогда не очищаете 'comma', поэтому после ее установки вы в конечном итоге помещаете запятую после всех последующих строк (пустой или нет). Если это ваша проблема, добавьте 'else {comma =" "}' в ваш оператор 'if'. Если нет, то вам нужно будет добавить детали к вопросу. –

+0

@clcto жаль, что я не очень хорошо очищал свою проблему, я редактировал свой пост, надеясь, что он станет более ясным для вас сейчас? – Rsalm

ответ

0

Проблема проста.

Вы читаете строку данных с

while (getline(File,line)) { 

Но тогда вы обработает только один элемент из этой строки:

if (line.empty()) { 
     ... 
     s >> num ; 
     ... 
    } 
    else { 
     s >> num ; 
    } 

Вам просто нужно положить, что if ... else утверждение в какой-то цикл.

Кроме того, я не понимаю первую ветвь этого заявления if: если line пуст, не должно быть ничего в s, чтобы читать.

Так, слегка отредактированы, это должно быть ближе к тому, что вы ищете (я не пробовал это, чтобы увидеть, если это на самом деле работает):

... 
    while (getline(File,line)) { 
     if (line.empty()) { 
      array[i] = "," 
      ++i; 
      continue; 
     } 
     istringstream s(line); 

     while(s >> num) { 
      array[i] = num; 
      ++i; 
     } 
    }   
    return 0; 
} 
Смежные вопросы