Форум программистов, компьютерный форум CyberForum.ru

Убрать запятые - C++

Восстановить пароль Регистрация
 
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
12.02.2013, 10:40     Убрать запятые #1
Добрый день. У меня в файле (temp.txt) находятся цифры через запятую
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1
1,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
Не получается урать запятые и поставить пробелы вот так в файл output.txt чтобы потом эти цифры загнать в массив int
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1
1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Из файла у меня получается загнать в массив если нет запятых.
Пробовал так но не получается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        fstream r;
        r.open("temp.txt", ios::in);
        fstream o;
        o.open("output.txt", ios::in);
        AnsiString c;
        AnsiString fr;
        while (r>>c.c_str())
        {
          if (c!=",") {
           fr=c+fr;
          }
          else{
          o<<fr.c_str();
          fr="";
          }
 
        }
Заганяю в массив таким образом
C++
1
2
3
4
5
6
7
8
fstream te;
        te.open("output.txt", ios::in);
        int otvet[100][100]; // массив ответов
        for (int i = 0; i < kolsepei; i++) {
            for (int t = 0; t < kv + 1; t++) {
                te >> otvet[t][i];
            }
        }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
12.02.2013, 11:10     Убрать запятые #2
Считываешь число, затем считываешь запятую, а затем снова число и т. д.
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
12.02.2013, 11:17  [ТС]     Убрать запятые #3
Каким образом? Я знаю как считывать до пробела а тут запятые. А как считывать до запятой?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
12.02.2013, 11:20     Убрать запятые #4
Если у тебя в файле есть 1,2,3 и ты из потока попытаешься считать число, то считается 1 и в потоке будет ,2,3 Остается считать один символ char, а затемесли считать опять число, то получишь 2.
иван_пропал
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
12.02.2013, 11:42  [ТС]     Убрать запятые #5
Сделал так все равно не получается, если же конечно я тебя правильно понял
C++
1
2
3
4
5
6
7
8
9
10
11
        fstream te; int w=1;
        te.open("temp.txt", ios::in);
        int otvet[100][100]; // массив ответов
        for (int i = 0; i < kolsepei*2-1; i++) {
            for (int t = 0; t < (kv + 1)*2-1; t++) {
               if (w=1) {
                 te >> otvet[t][i]; w=0;
               }
                else{w=1;}
            }
        }
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
12.02.2013, 13:47     Убрать запятые #6
Можно сделать с помощью std::replace_copy:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <iterator>
#include <algorithm>
 
 
int main() {
    std::ifstream ifs("temp.txt");
    std::ofstream ofs("output.txt");
    std::replace_copy(
          std::istreambuf_iterator<char>(ifs)
        , std::istreambuf_iterator<char>()
        , std::ostreambuf_iterator<char>(ofs)
        , ','
        , ' ');
}
Ну или "вручную":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream>
 
 
int main() {
    std::ifstream ifs("temp.txt");
    std::ofstream ofs("output.txt");
    ifs >> std::noskipws;
    for (char ch; ifs >> ch; ) {
        if (ch == ',') {
            ch = ' ';
        }
        ofs << ch;
    }
}
Добавлено через 4 минуты
Цитата Сообщение от иван_пропал Посмотреть сообщение
C++
1
if (w=1) { /* ... */ }
Всё таки так наверное:
C++
1
if (w == 1) { /* ... */ }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 14:47     Убрать запятые
Еще ссылки по теме:

Вывод предложений, не содержащих запятые C++
C++ В строке заменить все запятые на точки.Подсчитать кол-во замен!
В данной строке все запятые заменить на точки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
12.02.2013, 14:47     Убрать запятые #7
boost/spirit,
boost::split,
boost::tokenizer,

Добавлено через 45 минут
А да... самое наверное простое использовать getline указав разделитель ',' как разделитель delim
C++
1
getline(fs,str,',');
http://www.cplusplus.com/reference/s...tring/getline/
Yandex
Объявления
12.02.2013, 14:47     Убрать запятые
Ответ Создать тему
Опции темы

Текущее время: 11:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru