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

For и ограничение длинны строки

03.11.2017, 13:14. Просмотров 308. Ответов 4
Метки нет (Все метки)

Подскажите два вопроса по следующему коду:

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
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
 
using namespace std;
 
int main()
{
    int width; // the number of cells on the X axis
    cin>> width; //cin.ignore();
    int height; // the number of cells on the Y axis
    cin >> height; //cin.ignore();
    vector <double> nodes;
    vector <double>::const_iterator iter;
    string rezult;
    for (int i = 0; i < height; i++) {
        string line; // width characters, each either 0 or .
        getline(cin, line);
        //line.erase(width, line.end());
        int x = 0;
                int y = i;
        for (x = line.find(".", x++); x != string::npos; x = line.find(".", x + 1)) {
            double xy = x + ((y-1) / 10.);
                        //cout<<xy<<endl;
            nodes.push_back(xy);
                                            
        }
        
    }
    
        for (int v=0; v<nodes.size();v++){
                cout<<nodes[v]<<" ";}
1. Почему, когда с cin в height идет 2, то считывается всего одна строка, а не две (по-идее: i=0 это раз и i=1 это второй раз)
2. Как можно ограничить получаемую сроку line количеством символов равным width, или потом удалить лишние символы, которые длиннее width?

Добавлено через 43 минуты
Второй вопрос решил вот так:
C++
1
if(line.size()>width) {line=line.erase(width, string::npos);}
А вот первый остается открытым
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2017, 13:14
Ответы с готовыми решениями:

Удалить из строки слова нечетной длинны и перевернуть (ьтунревереп ) слова нечетной длинны
#include &lt;iostream&gt; using namespace std; void func(char*stroka, int str, char *slovo, int sl) {...

Чтение длинны строки из файла
Помогите пожалуйста написать программу на C, которая в текстовом файле находит самое длинное...

Чтение из файла строки неизвестной длинны
Здравствуйте. Стоит задача писать в файл строку неизвестной длинны, введенную с клавиатуры. А...

Строки: вывести на экран слова четной длинны
Вводим строку, требуется вывести на экран слова четной длинны в одной строке,нечетной в...

Строки. Вывести на экран слово максимальной длинны
Товарищи форумчане! Помогите пожалуйста юному программисту с задачкой. Задача: Ввести с...

4
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
03.11.2017, 13:28 2
После getline в потоке остаётся '\n', который кушается при втором считывании. Используйте std::cin.ignore().
0
VitU
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 27
03.11.2017, 18:44  [ТС] 3
А куда ее вписать? Вписал после getline(), теперь да, начало позволять вводить вторую строку, но вопрос в том, что вторая строка не обрабатывается, подскажите что делать, привожу полный код:
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
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
 
using namespace std;
 
int main()
{
    int width; // the number of cells on the X axis
    cin>> width; //cin.ignore();
    int height; // the number of cells on the Y axis
    cin >> height; //cin.ignore();
    vector <double> nodes;
    vector <double>::const_iterator iter;
    for (int i = 0; i < height; i++) {
        string line; // width characters, each either 0 or .
        getline(cin, line); cin.ignore();
        if(line.size()>width) {line=line.erase(width, string::npos);}
        int x = 0;
                int y = i;
        for (x = line.find("0", x++); x != string::npos; x = line.find("0", x + 1)) {
            double xy = x + ((y-1) / 10.);
 
            nodes.push_back(xy);
                                            
        }
        
    }
    
 
        for (unsigned int i = 0; i < nodes.size(); ++i) {
        int x1=(int)nodes[i];
                int y1=((int)((nodes[i]+0.01)*10))%10;
                int x2=-1;
                int y2=-1;
                int x3=-1;
                int y3=-1;
                
                iter = find(nodes.begin(), nodes.end(), (nodes[i] + 1.));
                if (iter != nodes.end()) {
                    x2=(int)(nodes[i]+1.);
                    y2= ((int)((nodes[i]+1.01)*10))%10;
                }
                
                iter = find(nodes.begin(), nodes.end(), (nodes[i] + 0.1));
                if (iter != nodes.end()) {
                    x3=(int)(nodes[i]+0.1);
                    y3= ((int)((nodes[i]+0.11)*10))%10;
                }
                cout<<x1<<y1<<endl<<x2<<y2<<endl<<x3<<y3<<endl;
        }
                
 
    }
Добавлено через 3 часа 53 минуты
Так по логике должно работать, но получается, что cin.ignore(), игнорирует всю строку, в зависимости от местоположения, либо первую, либо вторую. Или это проблема IDE
0
nd2
3055 / 2562 / 1121
Регистрация: 29.01.2016
Сообщений: 8,596
03.11.2017, 18:54 4
Цитата Сообщение от MrGluck Посмотреть сообщение
После getline в потоке остаётся '\n'
Нет.

Добавлено через 2 минуты
После cin >> нужно '\n' убирать.
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
03.11.2017, 19:57 5
Цитата Сообщение от nd2 Посмотреть сообщение
Нет.
После cin >> нужно '\n' убирать.
Да, вы правы.
0
03.11.2017, 19:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2017, 19:57

Вывод строки фиксированной длинны в cout (аля printf(%5.0d)!
Добрый вечер! Сегодня встал перед выбором... как выводить через printf или cout. Через принтф код...

Как написать максимально оптимизированную функцию поиска длинны строки?
Мысль о максимально оптимизированной функции длинны строки, где строка это указатель на литерал...

Как поместить строки разной длинны в двумерный массив? (файловый ввод/вывод)
Всем доброго времени суток! Есть файл с нескольким количеством строк и все эти строки разной...


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

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

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