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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
#1

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

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

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

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

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

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

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

Вопрос по string'у - C++
Насколько мне известно, string резервирует память, как и вектор... Если это так, возможно ли отключить резервирование, т.к. в ходе работы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
17.04.2010, 23:07     Вопрос по строкам (string) #2
1) Тут всё правильно. Что до этого в проге?
2) Вроде правильно. Если введёшь строку, начинающуюся с пробела, с skipws он пропустится, а с noskipws считается пустая строка, то есть пробел будет считаться уже как разделитель в конце.
3) Можно ведь и посимвольно читать, и ещё как-нибудь, но вообще getline - самый нормальный.
4) istringstream
5) istream::sync
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
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
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 09:59     Вопрос по строкам (string)
Еще ссылки по теме:

Вопрос по вектору string'ов - C++
Не совсем представляю как работает вектор стрингов std::vector&lt;std::string&gt; texts; Вектор по стандарту располагается в едином куске...

Создание string из части другого string - C++
Сегодня на олимпиаде задача была, которую я не решил, потому что не знал, как создать строку из части другой строки в C++. Например: нужно...

String to string *ABCD*(41 42 43 44) -> *«Í*(AB CD) - C++
В общем вопрос в теме. На сях писал последний раз на 2 курсе, сейчас сижу не могу придумать как изящнее придумать решение. Надо для...

Преобразовать латинский текст string в русский текст string - C++
Пишу приложение, которое мне будет отправлять в твиттер нужные сообщения. Встретился со следующей головоломкой (сразу хочу сказать, что...

по строкам - C++
Пусть задан текст, заканчивающий точкой. Текст состоит из слов, разделенных пробелами. Слово последов. Русских cлов(как строчных, так и...

Программа по строкам - C++
Вычислить арифметическое выражение, заданное в формате строки. Строка может содержать числа, а также операции сложения и вычитания. пример:...


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

Или воспользуйтесь поиском по форуму:
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
18.04.2010, 09:59  [ТС]     Вопрос по строкам (string) #5
спасиб, все робит
Yandex
Объявления
18.04.2010, 09:59     Вопрос по строкам (string)
Ответ Создать тему
Опции темы

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