2016-01-25 3 views
0

Мой текст Файл:

Name G M S 
Cart 1 0 1 
Jane 0 1 0 

То, что я до сих пор:

#include <iostream> 
#include <string> 
#include <fstream> 
#include <stdlib.h> 
#include <algorithm> 
using namespace std; 
void scoreChanger(); 
string line; 
int main() 
{ 

    string yn; 
    int ctr = 0; 
    ifstream infile; 
    infile.open("WiiTourney.txt"); 
    if (infile.is_open()) 
    { 
     cout << "This is your current score table: " << endl; 
     while(getline(infile, line)) 
     { 
      ctr++; 
      cout << line << endl; 
      cout << ctr << endl; 
     } 
     cout << endl; 
    } 
    else 
    { 
     cout << "Unable to open file" << endl; 
    } 
    infile.close(); 

     cout << endl; 

     cout << "Would you like to change the scores? " << endl; 
     cin >> yn; 
     transform(yn.begin(), yn.end(), yn.begin(), ::tolower); 

     if (yn == "yes") 
     { 
      scoreChanger(); 
     } 
     else 
     { 
      infile.close(); 
      return 0; 
     } 

    return 0; 
} 
void scoreChanger() 
{ 
    string name; 
    ofstream outfile; 
    outfile.open("WiiTourney.txt"); 
    if (outfile.is_open()) 
    { 
     cout << "Who won the game? " << endl; 
     cin >> name; 
     transform(name.begin(), name.end(), name.begin(), ::tolower); 
     if (name == "jane") 
     { 
      while(getline(outfile, line)) 
      { 
       cout << line << endl; 
      } 
     } 
     for (int x = 0; x < line.length(); x++) 
     { 
      if (line[x] == 8 && line[x] != 'G') 
      { 

      } 
     } 
    } 
    else 
    { 
     cout << "Error opening file. " << endl; 
     exit(1); 
    } 

} 

То, что я хочу, чтобы это сделать:

Скажем, я хотел, чтобы иметь возможность добавить 1 пункт к Столбцы игр (G) только для Корзины. Проблема для меня заключается в том, что я хочу изменить только 1 в столбце G, и я знаю, что столкнулся с проблемами, просто перейдя к циклу и поиска экземпляров, где 1 появляется, потому что в одной строке может быть несколько 1. Я также получаю ошибку на линии while(getline(outfile, line)), которая говорит «нет функции согласования для вызова„GetLine (станд :: ofstream &, станд :: струнной &)“»Как заменить определенное слово в строке в файле?

Спасибо, ваша помощь не очень оценили.

+0

Используйте 'cstdlib' в C++, а не' stdlib.h'. –

+0

@CrazyEddie: Не нужно использовать его вообще. Однако OP должен включать 'cctype' для' std :: tolower'. –

ответ

0

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

Поскольку имена являются единственными элементами с переменной длиной (при условии, что оценки не превышают 9, потому что это даст 2 символа), я бы сначала прочитал первое слово каждой строки и ввел это в массив имена.

Из этого вы можете найти определенные элементы, используя индексы строк и столбцов. Если C++ не содержит функцию для получения символов на основе индексов строк и столбцов, я бы циклически просматривал файл и добавлял каждый символ в соответствующую позицию в двумерном массиве.

Например:

characters[0][0] 

вернется N, с самого начала "имена".

И, конечно же, чтобы получить результат вы включить длину имени конкретной строку, чтобы получить значение:

characters[names[0].length()+1][1] 

Это возвратил бы счет под G для первого имени в списке.

+0

спасибо, но я до сих пор получаю сообщение об ошибке: «Нет подходящей функции для вызова« getline »(std :: ofstream &, std :: string &) '" – Cjolsen06

+0

Вы не можете вызвать 'getline' в' streamstream'. Это бессмысленно. Вы вызываете 'getline' в потоках _input_. – paddy

+0

@paddy Тогда как я должен читать каждую строку, чтобы заменить значение в ней? – Cjolsen06

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