Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
I_like_C++
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
#1

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

17.04.2010, 22:43. Просмотров 1084. Ответов 4
Метки нет (Все метки)

нужно взять с клавиатуры 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) как очистить буфер ввода??
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2010, 22:43
Ответы с готовыми решениями:

Вопрос по строкам
Доброго всем дня!!! Рябята, подскажите, признак окончания строки - это константа '\0'? Если да, то...

вопрос по строкам
как я могу проверить Эдит на наличие запятой ? if (Edit1-&gt;Text ==&quot;,&quot;) ....... ...

Задача по строкам!String
Помогите пожалуйста с задачей по строкам.. String Вводится предложение строка,вывести все слова...

Интересный вопрос по строкам
У нас есть строка типа чар. С помощью функции strtok в строке найдено минимальное слово. Как...

переделать чаровскую прогу по строкам в string
Вот задание проги: Словом в строке считается последовательность букв латинского алфавита,...

4
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,213
Завершенные тесты: 3
17.04.2010, 23:07 #2
1) Тут всё правильно. Что до этого в проге?
2) Вроде правильно. Если введёшь строку, начинающуюся с пробела, с skipws он пропустится, а с noskipws считается пустая строка, то есть пробел будет считаться уже как разделитель в конце.
3) Можно ведь и посимвольно читать, и ещё как-нибудь, но вообще getline - самый нормальный.
4) istringstream
5) istream::sync
1
I_like_C++
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
17.04.2010, 23:16  [ТС] #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 строку могу получить=((
как переделать??
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,213
Завершенные тесты: 3
18.04.2010, 00:04 #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;
1
I_like_C++
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
18.04.2010, 09:59  [ТС] #5
спасиб, все робит
0
18.04.2010, 09:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 09:59

Задачи по строкам. Решение желательно через string
1. Дана строка, состоящая из русских слов разделенных пробелами(одним или несколькими). Вывести...

Задачки по строкам на С++ вместо string использовать char
1) Дана строка. Если она представляет собой запись целого числа, то вывести 1, если вещественного...

Вопрос по string'у
Насколько мне известно, string резервирует память, как и вектор... Если это так, возможно ли...


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

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

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