Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
AleksandrMild
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 18
1

Поэлементный ввод из строки string

02.09.2015, 15:03. Просмотров 1106. Ответов 4
Метки нет (Все метки)

Здравствуйте, форумчане. Есть такая проблемка.
Имеется файл который состоит из символов и чисел (X456.1) - это координаты.
Например: одна строка "N6 Y-295.543 Z-0.399" из тысячи например
При этом количество элементов постоянно меняется в случайном порядке - появляется X<double>, исчезают Y<double> или Z<double>. При этом в файле есть и другие записи и имволы.
Как сделать поэлементный ввод этих чисел? Я пишу например через поток:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ifstream OriginalFile("fileoriginal.nc",ios::in);
char Symb;
double Number;
stringstream InputStream;
 
while (!OriginalFile.eof()) //While #2
   {
        getline(OriginalFile, ReadData);
        InputStream << ReadData;              // Загрузили строку в поток
 
          while (!InputStream.eof())      //While #2-1
                {
                InputStream >> Symb >> Number;
                }
   }
Внутри while 2-1 идет цепочька if для вложения в нужные ячеки массивов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (Symb == 'N')
                        {
                        ArrN[ArrCounter]=Number;
                        Nchanged=true;
                        }
 
                 if (Symb == 'X')
                        { ArrX[ArrCounter]=Number;
                        Xchanged=true;             }
 
                 if (Symb == 'Y')
                        {
                        ArrY[ArrCounter]=Number;
                         Ychanged=true;
Но оно не считывает эти символы, а выдает 0.
Я так понимаю, что нужно вписать столько в InputStream >> столько "Symb >> Number;" сколько имеется в строке, но это значение постоянно меняется.
Как сделать этот поэлементный ввод в строки, пока не закончились символы?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2015, 15:03
Ответы с готовыми решениями:

Простой ввод строки с пробелами через string
Visual studio 2012, никак не могу ввести строку через string. У меня не...

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

ввод string-а
Как написать во входных данных 2 строки первая с данными а второя пустая...

Ввод string после int
Здравствуйте. Нужно ввести int и сразу string через getline. дело в том, что...

Как прекратить ввод string?
Снизу код. Пока прога должна просто напечатать пары имя-возраст,но вопрос в...

4
Redee
22 / 31 / 5
Регистрация: 04.10.2014
Сообщений: 128
02.09.2015, 15:10 2
Побайтово читай строки - сверяй, опрокидывай в vector<char>.
Потом гони вектора на нужные тебе символы.

А вообще для удобного хранения / чтения / записи актуально использовать tinyXml2.
Гораздо удобнее.
1
AleksandrMild
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 18
02.09.2015, 15:23  [ТС] 3
Цитата Сообщение от Redee Посмотреть сообщение
Побайтово читай строки
Какими функциями побайтово можно прочитать строку? Объясните по-детальнее, пожайлуста?
0
Redee
22 / 31 / 5
Регистрация: 04.10.2014
Сообщений: 128
02.09.2015, 16:08 4
Лучший ответ Сообщение было отмечено AleksandrMild как решение

Решение

Сразу с гугла вылетел примерный метод.
Только открывайте со спецификатором для текста.


Добавлено через 13 минут
Как вариант вот решение только что написал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
#include <vector>
using namespace std;
 
void main() {
 
    ifstream myReadFile;
    myReadFile.open("text.txt");
    
    vector<char> buffer;    
    
    unsigned n = 0;
    while ( !myReadFile.eof() )
    {
        buffer.resize(++n);
        myReadFile >> buffer[n-1];
    }
 
    myReadFile.close();
}
Использовал это > http://www.cplusplus.com/forum/beginner/8388/
1
Somebody
2801 / 1612 / 251
Регистрация: 03.12.2007
Сообщений: 4,215
Завершенные тесты: 3
02.09.2015, 19:58 5
Regexp'ом можно.
http://en.cppreference.com/w/cpp/regex
0
02.09.2015, 19:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2015, 19:58

Ввод с клавиатуры в string переменную
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;string&quot; #include &quot;map&quot;...

Ввод данных в объект string из потока
Знаю что можно сделать так: #include &lt;strstream&gt; ... char str = &quot;&quot;;...

String массив, ввод и вывод элементов массива
Здравствуйте, Подскажите пожалуйста, если есть массив типа string из 5...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru