Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322

Как определить конец строки?

14.10.2017, 17:09. Показов 2705. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если ввести например команду "ls -l /", то в потой пойдет текст, каким образом этот текст отделяется на абзац, и как написать условие
while(конец строки)
{}
Миниатюры
Как определить конец строки?  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2017, 17:09
Ответы с готовыми решениями:

Создание произвольной строки,бинарной строки ,добавление в конец строки другой строки,вывод на экран. Что нужно исправит
#include <stdio.h> #include <iostream> using namespace std; class Str { protected: char...

Массив строк. Конец строки и конец массива
\n - перевод на новую строку \0 - конец строки Если у меня массив строк (текст), чем...

Изменить слова: первая буква добавляется в конец слова и в конец же добавляется окончание ai
Задача: вводят выражение, строку из нескольких слов, её нужно преобразовать в особый язык. Этот...

7
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
14.10.2017, 18:54
C
int ch; /* важно, что int, а не char */
while ((ch = fgetc(pfile)) != '\n')
{
   ...
}
1
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
14.10.2017, 18:58  [ТС]
а как можно всю таблицу распарсить в vector<string>, пословно, причем при переменном количестве столбцов??

идея что бы данные конвейера передавались на вектор, обрабатывались с++ и возвращались в поток.

так можно построчно, но как потом строки разделить?

C++
1
2
3
4
5
6
7
8
9
10
11
void parsingString()
{
    int i{0};
    string s[100];
    while (getline(cin, s[i]))
    {
        cout << s[i] << endl;
        i++;
    }
    cout << i << endl;
}
Добавлено через 42 секунды
и так тут можно использовать ?
C++
1
std::cin.peek() != '\n'
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
14.10.2017, 19:28
Цитата Сообщение от Amadara Посмотреть сообщение
но как потом строки разделить?
Что ты понимаешь под "разделить"?
0
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
14.10.2017, 19:35  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Что ты понимаешь под "разделить"?
мне нужно всю таблицу из терминала, получаемую ps, передать в поток конвейером моей программе, которая сепарирует все таблицу на отдельные "слова", которые моя программа сможет обрабатывать.

например
Bash
1
ps | myProg | tail -n 2
где моя прога обработает

я нагородил таких костылей

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
void parsing();
void parsingString();
using namespace std;
 
struct UtilPs
{
    string arg0;
    string arg1;
    string arg2;
    string arg3;
};
int main(int argc, char* argv[])
{
    parsingString();
 
    return 0;
}
 
void parsingString()
{
    vector<UtilPs> bufer;
    int count{0};
    string s[100];
    
    string arg0;
    string arg1;
    string arg2;
    string arg3;
 
    while (getline(cin, s[count]))
    {
        cout << count << " " << s[count] << endl;
        count++;
    }
    
    for (int i = 0; i < count; i++)
    {
        cout << "s[i] " << s[i] << endl;
        istringstream is{ s[i] };
        is >>  arg0
            >> arg1
            >> arg2
            >> arg3;
        bufer.push_back(UtilPs{
            arg0,
            arg1,
            arg2,
            arg3
        });
    }
 
    for (int i = 0; i < bufer.size(); i++)
    {
        cout << "filtered " << bufer[i].arg0 << endl;
    }
 
    cout << count << endl;
}
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.10.2017, 00:25
Лучший ответ Сообщение было отмечено Amadara как решение

Решение

Если я правильно понял постановку вопроса то тут два уровня:
1. Разбитие на строки (ты уже сделал)
2. Разбитие одной строки на отдельные слова

Но всё равно без понимания конечной цели тут сложно что-то сказать. Зачем делается разбивка на слова и что с ними предполагается делать. В Си++ вроде бы есть какой-то класс, в котором оператором >> можно тупо по словам распилить строку на произвольное количество слов. И вроде бы даже через istringstream. Т.е. то же самое, что у тебя, по идее можно сделать в цикле (с заранее неизвестным количеством итераций)
0
 Аватар для Amadara
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
15.10.2017, 00:39  [ТС]
Моя цель конвейер, мне нужно что бы из одной утилиты для линукс, например ps, ls, можно было передавать данные на другую утилиту и далее.
Моя же программа должна воспринимать поток, обрабатывать его и передавать дальше.
Например я могу получить перечень активных процессов и обработать его, результат передав далее.

#include <iostream>
позволяет работать с потоками,
while(cin >> a){} - позволит переписать все пословно , но огромный массив слов тяжело обрабатывать.
поэтому я хочу разбить построчно, а строки на отдельные слова, что бы получить таблицу.
к тому же мне нужно работать со столбцами, например с PID процесса, для этого мне нужен столбец.

такой код у меня получился:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <unistd.h>     
#include <sys/types.h>  
#include <sys/wait.h>   
#include <fcntl.h>
 
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <vector>
 
void parsingStringMass();
using namespace std;
 
 
int main(int argc, char* argv[])
{
    parsingStringMass();
    return 0;
}
 
struct UtilPs2
{
    string arg[100];
};
 
void parsingStringMass()
{
    vector<UtilPs2> bufer;
    int count{ 0 };
    string s[100]; //строки
    UtilPs2 argTmp; //слова в строках
 
    while (getline(cin, s[count]))
    {
        cout << count << " " << s[count] << endl;
        count++;
    }
 
    int i_set{}, j_set{};
    for (i_set = 0; i_set < count; i_set++)
    {
        //cout << "s["<<i_set<<"] " << s[i_set] << endl;
 
        istringstream is{ s[i_set] };
 
        for (j_set = 0; is >> argTmp.arg[j_set]; j_set++)
        {
            //cout << "argTmp " << j_set << ": " << argTmp[j_set] << endl;
        }
        bufer.push_back(argTmp);
    }
 
    for (int i = 0; i < bufer.size(); i++)
    {
        for (int j = 0; j < j_set; j++)
        {
            //cout << setw(10) << bufer[i].arg[j];
        }
        //cout << endl;
    }
 
 
    int jjj{};
    for (int i = 0; i < j_set; i++)
    {
        if (bufer[0].arg[i] == "PID")
        {
            jjj = i;
 
        }
    }
 
    for (int i = 1; i < bufer.size(); i++)
    {
        for (int j = 0; j < j_set; j++)
        {
            if (stoi(bufer[i].arg[jjj]) % 2 == 0)
            {
                cout << setw(10) << bufer[i].arg[j] ;
            }
        }
        cout << endl;
    }
 
    //cout << count << endl;
}
Миниатюры
Как определить конец строки?  
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.10.2017, 13:08
Очередной набор слов километровой длины, в котором есть что угодно, кроме ответа на поставленный вопрос. Непосредственно процесс распиливания на отдельные слова у тебя уже реализован. Для порядку просто приведу пример без лишней шелухи (мало ли кому-то понадобится). С остальным разбирайся сам, если не можешь внятно вопрос поставить

C++
// Файл t.cc
#include <iostream>
#include <sstream>
 
int main (void)
{
  std::string str;
 
  while (std::getline (std::cin, str))
  {
    std::cout << "line={" << str << "}" << std::endl;
    std::istringstream is (str);
    while (is >> str)
      std::cout << "word=[" << str << "]" << std::endl;
  }
 
  return 0;
}
Code
$ cat t.txt
qwer tyui op
123 45
 
$ g++ t.cc
 
$ ./a.out < t.txt
line={qwer tyui op}
word=[qwer]
word=[tyui]
word=[op]
line={123 45}
word=[123]
word=[45]
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2017, 13:08
Помогаю со студенческими работами здесь

Как первые два символа строки переставить в конец этой строки?
Собственно вопрос

Как переместить символ окончания строки /0 в конец строки?
Это мне нужно сделать, чтоб не появлялись кракозябры. Причем сделать для всех строк подключенного к...

Работа с файлами, как определить конец строки
Как установить определение конца строки файла? Подготовьте в «Блокноте» текстовый файл. Напишите...

Как определить конец введенной строки и взять последние 5 символов?
Ребят, подскажите пожалуйста. вот код программы, но мне нужно, чтобы она считывала не все...

Как определить конец строки при вводе с консоли?
Необходимо считать строку неизвестной длины с консоли посимвольно (используется cin). Как...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru