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

Вопрос по строкам (string) - C++

Восстановить пароль Регистрация
 
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
17.04.2010, 22:43     Вопрос по строкам (string) #1
нужно взять с клавиатуры 2 строки...ну я недолго думая решил воспользоваться методом getline(), потому как манипулятор skipws не работает так как должен работать=/ и еще потому, что другие методы получения строк типа стринг мне не известы
собственно вот:
C++
1
2
3
4
5
6
string s1, s2;
cout<<"Введите первую строку: ";
getline(cin,s1);
cout<<endl;
cout<<"Введите вторую строку: ";
getline(cin,s2);
программа выводит:
"
Введите первую строку: (пусто)
Введите вторую строку: (вот тут можно вводить)
"
в результате 1ая строка у меня пустая, а вторая получается такая, какая нужна
может дело в буфере ввода??

1)Объясните как получить обе строки!
2)Как работает манипулятор skipws?
C++
1
2
3
4
5
#include <iomanip>
string temp;
cin>>skipws;
cin>>temp;
cin>>noskipws;
я пробую им пользоваться вот так=/ прально или нет?
3) может еще есть какие нибудь методы получения строк??
4) как можно преобразовать строки в числа? (в лабораторной такое задание)
5) как очистить буфер ввода??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2010, 22:43     Вопрос по строкам (string)
Посмотрите здесь:

Вопрос нуба о типе STRING C++
C++ Интересный вопрос по строкам
вопрос по строкам C++
C++ Вопрос по вектору string'ов
Вопрос по string'у C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
17.04.2010, 23:07     Вопрос по строкам (string) #2
1) Тут всё правильно. Что до этого в проге?
2) Вроде правильно. Если введёшь строку, начинающуюся с пробела, с skipws он пропустится, а с noskipws считается пустая строка, то есть пробел будет считаться уже как разделитель в конце.
3) Можно ведь и посимвольно читать, и ещё как-нибудь, но вообще getline - самый нормальный.
4) istringstream
5) istream::sync
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
17.04.2010, 23:16  [ТС]     Вопрос по строкам (string) #3
вот полная прога на перегруз функций:
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include <iostream>
#include <vector>
#include <string>
#include <ctime>
#include <iomanip>
using namespace std;
typedef vector<int> vec;
typedef vector<vec> matrix;
int diff(int a, int b)
{
    return (a-b);
}
vec diff(vector<int>f1, int b)
{
    int n=f1.size();
    for(int i=0; i<n;i++)
    {
        f1[i]-=b;
    }
    return f1;
}
matrix vvod(int n) //Функция для создания матрицы mxn
{
    matrix A;
    vec Matr(n,0);
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<n; j++)    
            Matr[j]=i+j;
        A.push_back(Matr);
    }
return A;
}
matrix znach(int n,int k,int l)//заполение матрицы случайными числами
{
    matrix A = vvod(n);
    n=A.size();
    for (int i=0; i<n; i++)
    {
        n=A[i].size();
        for (int j=0; j<n; j++)
            A[i][j]=rand()%(l-k+1)+k;
    }
return A;
}
matrix klava(int n)//заполнение матрицы с клавиатуры
{
    int k;
    matrix A=vvod(n);
    for (int i=0; i<n; i++)
       {
           for (int j=0; j<n; j++)
           {
               cout<<"Введите элемент ("<<i+1<<";"<<j+1<<")матрицы А: ";cin>>k;
               A[i][j]=k;
           }
       }
    return A;
}
matrix diff(matrix A, matrix B)
{
    int n=A.size();
    matrix C=vvod(n);
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n;j++)
        {
            C[i][j]=A[i][j]-B[i][j];
        }
    }
    return C;
}
int diff(string s1,string  s2)
{
    int m=s1.size();
    int n=s2.size();
    return (m-n);
}
void diff(const matrix &A)
{
    int m=A.size();
    for(int i=0;i<m;i++)
    {
        int n=A[i].size();
        for(int j=0;j<n;j++)
            cout << A[i][j] << '\t';
        cout << endl;
    }
    cout << endl;
}
int main()
{
    setlocale(0,"Russian");
    srand((unsigned)time(NULL));
    int a,b,q;
    cout<<"Задание:\nС помощью механизма перегрузки функций реализовать функции для \nнахождения разности:\n1-двух чисел (результат – число)";
    cout<<"\n2-двух строк (преобразовать строки в числа, результат – число)";
    cout<<"\n3-вектора и числа (результат – вектор, из каждого элемента которого вычитается\n  заданное число)\n";
    cout<<"4-двух квадратных матриц одинаковой размерности\n";
    cout<<"Введите номер задания: ";cin>>q;
    switch(q)
    {
    case 1:
        {
            cout<<"Введите число(через пробел): ";cin>>a>>b;
            cout<<"Разность двух чисел: "<<diff(a,b)<<endl;
        }break;
    case 2:
        {
            string s1, s2;
            cout<<"Введите первую строку: ";
            getline(cin,s1);
            cout<<endl;
            cout<<"Введите вторую строку: ";
            getline(cin,s2);
            cout<<"Разность двух строк: "<<diff(s1, s2)<<endl;
        }break;
    case 3:
        {
            vec f1;
            int n, x;
            cout<<"Задайте число элементов в векторе: ";cin>>n;
            for(int i=0; i<n; i++)
            {
                cout<<"Введите элемент вектора: ";
                cin>>x;
                f1.push_back(x);
            }
            cout<<"Задайте число: ";
            cin>>b;
            f1=diff(f1,b);
            cout<<"Полученный вектор: \n";
            for(int i=0; i<n; i++)
            {
                cout<<f1[i]<<" ";
            }
            cout<<endl;
        }break;
    case 4:
        {
            matrix A, B,C;
            int y, n,k,l;
            bool v=0;
            cout<<"Введите размерность матриц A и B nXn: ";
            cin>>n;
            cout<<"\nСпособ задания матрицы:\n1-случайно\n2-с клавиатуры\nВвод: ";
            cin>>y;
            while (v==0)
            {
                if ((y==1)||(y==2)) 
                {
                    switch(y)
                    {
                    case 1: 
                        {
                            cout<<"Задайте диапозон случайных чисел [a;b] для матрицы A (через пробел): ";cin>>k>>l;
                            A=znach(n,k, l);//заполение матрицы случайными числами
                            cout<<"Матрица А:\n";
                            diff(A);
                            cout<<"Задайте диапозон случайных чисел [a;b] для матрицы B (через пробел): ";cin>>k>>l;
                            B=znach(n, k, l);//заполение матрицы случайными числами
                            cout<<"Матрица В:\n";
                            diff(B);
                        }break;
                    case 2: 
                        {
                            A=klava(n);//заполнение матрицы с клавиатуры
                            cout<<"Матрица А:\n";
                            diff(A);
                            B=klava(n);//заполнение матрицы с клавиатуры
                            cout<<"Матрица В:\n";
                            diff(B);
                        }break;
                    }
                    cout<<"Разность элементов матриц A и В (A-B)\n";
                    C=diff(A,B);
                    diff(C);
                    v++;
                }
                else
                {
                    cout<<"Введите другой способ заполнения\nВвод: ";
                    cin>>y;
                }
            }
        }break;
    default: cout<<"Нет такого задания!\n";
    }
 
system("pause");
return 0;
}
4) istringstream
5) istream::sync
примеры можете привести, с английским не очень я=((

Добавлено через 2 минуты
все равно только 1 строку могу получить=((
как переделать??
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
18.04.2010, 00:04     Вопрос по строкам (string) #4
1) После форматированного ввода [числа] перевод строки остаётся непрочитанным, он и читается первым getline'ом.

C++
1
2
3
cin >> qq;
cin.sync(); // пропускаем непрочитанное
getline(cin, str);
4)
C++
1
2
3
4
5
6
7
8
#include <sstream>
...
string str("   1234 qq ww");
istringstream ss(str);
// ss - обычный поток поток ввода, как, например, cin
// а в качестве буфера - строка
int q;
ss >> q;
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
18.04.2010, 09:59  [ТС]     Вопрос по строкам (string) #5
спасиб, все робит
Yandex
Объявления
18.04.2010, 09:59     Вопрос по строкам (string)
Ответ Создать тему
Опции темы

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