Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204

Строки

02.04.2009, 16:55. Показов 2085. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помоги разобраться. Переписываю код с книжкиVisual CPP 6 - Руководство Разработчика, компилирую в MS VS2008 - выбивает ошибки
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
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <iomanip>
#define max 20
void row(void);
 
int main(int argc,char* argv[])
{
...
// вывод 19-ти символов строки, минимальная ширина 20
    row(); //[24]
    ostream(str,20).write(psz,19)<<ends;
    cout.width(19);
    cout << str;
    // вывод первых двух символов строки
    row(); //[25]
    ostream(str,3).write(psz,2)<<ends;
    cout << str;
...
void row(void){
    static int In = 0;
    cout << "\n [";
    cout.width(2);
    cout << ++In << "] ";
}
Ошибки
Code
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
1>c:\myprojects\ioflags\ioflags\ioflags.cpp(137) : error C2665: std::basic_ostream<_Elem,_Traits>::basic_ostream: ни одна из 3 перегрузок не может преобразовать все типы аргументов
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\include\ostream(50): может быть 'std::basic_ostream<_Elem,_Traits>::basic_ostream(std::basic_streambuf<_Elem,_Traits> *,bool)'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\include\ostream(56): или       'std::basic_ostream<_Elem,_Traits>::basic_ostream(std::_Uninitialized,bool)'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        при попытке сопоставить список аргументов '(char [20], int)'
1>c:\myprojects\ioflags\ioflags\ioflags.cpp(137) : error C2228: выражение слева от ".write" должно представлять класс, структуру или объединение
1>c:\myprojects\ioflags\ioflags\ioflags.cpp(142) : error C2665: std::basic_ostream<_Elem,_Traits>::basic_ostream: ни одна из 3 перегрузок не может преобразовать все типы аргументов
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\include\ostream(50): может быть 'std::basic_ostream<_Elem,_Traits>::basic_ostream(std::basic_streambuf<_Elem,_Traits> *,bool)'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\include\ostream(56): или       'std::basic_ostream<_Elem,_Traits>::basic_ostream(std::_Uninitialized,bool)'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        при попытке сопоставить список аргументов '(char [20], int)'
1>c:\myprojects\ioflags\ioflags\ioflags.cpp(142) : error C2228: выражение слева от ".write" должно представлять класс, структуру или объединение
1>Журнал построения был сохранен в "file://c:\MyProjects\ioflags\ioflags\Debug\BuildLog.htm"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2009, 16:55
Ответы с готовыми решениями:

Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки. 1. Я дуб дубом,даже...

Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк
Есть динамический массив строк. Заполняется, т.е. размер его уже известен будет. Но дальше нужно сделать задание: &quot;Добавить строки,...

Удалить строки динамической матрицы, начиная со строки К1 и до строки К2
Сформировать динамический двумерный массив, заполнить его случайными числами и удалить строки, начиная со строки К1 и до строки К2 вот...

11
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
02.04.2009, 16:57
что такое ends???
ой, тут вообще что-то страшное...
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
02.04.2009, 17:07  [ТС]
так в книге напечатано. Ещё в начали в книге написано подключить #include <strstrea.h>, но у меня такого нету.
вот объявление строки и псевдобуфера: char psz[] = "Строка для экспременента", str[max];(max = 20 - объявлен в константах).
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
02.04.2009, 17:16
Так ты в 11-ой строчке так и пишешь ...?
Или у тебя там что-то есть ))
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
02.04.2009, 17:18  [ТС]
Цитата Сообщение от Haster Посмотреть сообщение
Так ты в 11-ой строчке так и пишешь ...?
Или у тебя там что-то есть ))
Да, вместо ... там код, но вроде он не должен повлиять на поток.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
02.04.2009, 17:21
ты можешь скинуть весь исходник?
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
02.04.2009, 17:22  [ТС]
Пробовал вместо ostream писать ostrstream, но компилятор пишет
[CODE]
1>c:\myprojects\ioflags\ioflags\ioflags. cpp(137) : error C2228: выражение слева от ".write" должно представлять класс, структуру или объединение
1> тип: 'unknown-type'
1>c:\myprojects\ioflags\ioflags\ioflags. cpp(137) : error C3861: ostrstream: идентификатор не найден
1>c:\myprojects\ioflags\ioflags\ioflags. cpp(142) : error C2228: выражение слева от ".write" должно представлять класс, структуру или объединение
1> тип: 'unknown-type'
1>c:\myprojects\ioflags\ioflags\ioflags. cpp(142) : error C3861: ostrstream: идентификатор не найден
[\CODE]

вот весть код:
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
// ioflags.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <iomanip>
#define max 20
void row(void);
 
int main(int argc,char* argv[])
{
    char c = 'А', psz[] = "Строка для экспременента", str[max];
    int i = 1234;
    double d = 3.14159265;
    // вывод символа с
    row(); // [1]
    cout << c;
    // вывод ASCII-кода символа с
    row(); // [2]
    cout << (int)c;
    // вывод сисвола с ASCII-кодом 90
    row(); //[3]
    cout << (char)90;
    // вывод значения i в восьмеричной системе
    row(); //[4]
    cout << oct << i;
    // вывод значения i в шестнадцатеричной системе
    // с буквами в нижнем регистре 
    row(); //[5]
    cout << hex << i;
    // вывод значения i в шестнадцатеричной системе 
    // с буквами в верхнем регистре
    row(); //[6]
    cout.setf(ios::uppercase);
    cout << hex << i;
    cout.unsetf(ios::uppercase); //отмена верхнего регистра символов
    cout << dec; //возрат к десятичной
    // вывод одного символа, минимальная ширина поля 5,
    // выравнивание вправо с дополнением пробелами
    row(); //[7]
    cout.width(5);
    cout << c;
    // вывод одного символа, минимальная ширина поля 5,
    // выравнивание влево с дополнением пробелами
    row(); //[8]
    cout.width(5);
    cout.setf(ios::left);
    cout << c;
    cout.unsetf(ios::left);
    // вывод строки, отображается 24 символа
    row(); //[9]
    cout.width(24);
    cout << psz;
    // вывод строки, отображается 5 символов
    row(); //[10]
    cout.width(5);
    cout << psz;
    // вывод минимум 38-ми символов строки
    // с выравниванием вправо с дополнением пробелами
    row(); //[11]
    cout.width(38);
    cout.setf(ios::right);
    cout << psz;
    cout.unsetf(ios::right);
    // вывод минимум 38-ми символов строки
    // с выравниванием влево с дополнением пробелами
    row(); //[12]
    cout.width(38);
    cout.setf(ios::left);
    cout << psz;
    cout.unsetf(ios::left);
    // вывод значения i,по умолчанию отображаются 4 символа
    row(); //[13]
    cout << i;
    // вывод значения i с отображением знака
    row(); //[14]
    cout.setf(ios::showpos);
    cout << i;
    cout.unsetf(ios::showpos);
    // вывод значения i минимум 3-х цифр, отобраются 4 цифры
    row(); //[15]
    cout.width(3);
    cout << i;
    // вывод значения минимум из 10-ти цифер
    // с выравниваем вправо
    row(); //[16]
    cout.width(10);
    cout << i;
    // вывод значения i минимум из 10-ти цифер
    // с выравниманием влево с дополнением пробелами
    row(); //[17]
    cout.width(10);
    cout.setf(ios::left);
    cout << i;
    cout.unsetf(ios::left);
    // вывод значения i минимум из 20-ти цифер
    // с выравниванием вправо с дополнением нулями
    row(); //[18]
    cout.width(10);
    cout.fill('0');
    cout << i;
    cout.fill(' ');
    // вывод значения d,по умолчания
    row(); //[19]
    cout << d;
    // вывод значения d,миниммальная ширина 20,
    // с выравниванием вправо с дополнением пробелати
    row(); //[20]
    cout.width(20);
    cout << d;
    // вывод значения d, минимальная ширина 20
    // с выравниванием влево с дополнением нулями
    row(); //[21]
    cout.width(20);
    cout.fill('0');
    cout << d;
    cout.fill(' ');
    // вывод значения, минимальная ширина 20,
    // с выравниванием влево с дополнением пробелами
    row(); //[22]
    cout.width(20);
    cout.setf(ios::left);
    cout << d;
    cout.unsetf(ios::left);
    // вывод значения, минимальная ширина 20,
    // с выравниванием влево с дополнением нулями
    row(); //[23]
    cout.width(20);
    cout.fill('0');
    cout.setf(ios::left);
    cout << d;
    cout.unsetf(ios::left);
    cout.fill(' ');
    // вывод 19-ти символов строки, минимальная ширина 20
    row(); //[24]
    ostream(str,20).write(psz,19)<<ends;
    cout.width(19);
    cout << str;
    // вывод первых двух символов строки
    row(); //[25]
    ostream(str,3).write(psz,2)<<ends;
    cout << str;
    // вывод двух превых строк, минимальная ширина 19
    // с выравниванием вправо с дополнением пробелами
    row(); //[26]
    cout.width(19);
    cout << str;
    // вівод двух первіх символов строки, минимальная ширина 19,
    // с выравниванием влево с дополнением пробелами
    row(); //[27]
    cout.width(19);
    cout.setf(ios::left);
    cout << str;
    cout.unsetf(ios::left);
    // вывод значения d из 5-ти цифр
    row(); //[28]
    cout.precision(5);
    cout << d;
    // вывод значения d из двух цифер, минимальная ширина 20
    // с выравниванием вправо с дополнением пробелами
    row(); //[29]
    cout.width(19);
    cout.precision(2);
    cout << d;
    // вывод значения d из 4-х цифер
    row(); //[30]
    cout.precision(4);
    cout << d;
    // вывод значения d из 4-х цифер, минимальная ширина 20,
    // с выравниваниев вправо с дополнением пробелами
    row();//[31]
    cout.width(20);
    cout << d;
    // вывод значения d, минимальная ширина 20
    // 4 цифры после десятичной запятой, с выравниванием вправо
    // с дополнением пробелами, научная форма(експанента)
    row();//[32]
    cout.setf(ios::scientific);
    cout.width(20);
    cout << d;
    cout.unsetf(ios::scientific);
    system("PAUSE");
    return 0;
}
void row(void){
    static int In = 0;
    cout << "\n [";
    cout.width(2);
    cout << ++In << "] ";
}
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
02.04.2009, 17:27
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
class ostream : public ios {
public:
    explicit ostream(streambuf *strbuf);
    class sentry;
    virtual ~ostream();
    ostream& operator<<(
        ostream& (*pfn)(ostream&));
    ostream& operator<<(
        ios_base;& (*pfn)(ios_base&));
    ostream& operator<<(
        ios& (*pfn)(ios&));
    ostream& operator<<(
        streambuf *strbuf);
    ostream& operator<<(bool val);
    ostream& operator<<(short val);
    ostream& operator<<(unsigned short val);
    ostream& operator<<(int val);
    ostream& operator<<(unsigned int val);
    ostream& operator<<(long val);
    ostream& operator<<(unsigned long val);
    ostream& operator<<(float val);
    ostream& operator<<(double val);
    ostream& operator<<(long double val);
    ostream& operator<<(const void *val);
    ostream& put(char_type ch);
    ostream& write(char_type *str, streamsize count);
    ostream& flush();
    pos_type tellp();
    ostream& seekp(pos_type pos);
    ostream& seekp(off_type off,
        ios_base::seek_dir way);
    };
Судя по этому коду, у класса osteram нет конструктора с двумя параметрами
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
02.04.2009, 17:40  [ТС]
Не знаю, до классов не ещё не дошел. Вообще это книга("Visual CPP 6 - Руководство Разработчика") очень странная и ошибок много, но до этого мои знания помогали мне их решить, а с этой проблемой даже не знаю, что делать))

Добавлено через 4 минуты 7 секунд
Вот так в книге объединяться действие с потоком:
В этой программе следует обратить внимание на использование класса ostrstream в пунктах 24
и 25, а также неявно в пунктах 26 и 27. Этот класс управляет выводом строк. Необходимость в
нем возникла в связи с тем, что флаги форматирования оказывают влияние на работу
оператора <<, но не функции write() класса ostream(класс ostrstream является его потомком и
наследует данную функцию), которая записывает в поток указанное число символов строки.
Выводимые ею данные всегда прижимаются к левому краю. Поэтому мы поступаем
следующим образом:
ostrstream(strbuffer, 20).write(psz,19)<< ends;
cout.width(19); cout << strbuffer;
Разберем этот фрагмент шаг за шагом. Сначала вызывается конструктор класса ostrstream,
создающий временный безымянный объект данного класса, автоматически уничтожаемый по
завершении строки. Если вы еще не знакомы с понятием конструктора, то поясним, что это
особая функция, предназначенная для динамического создания объектов своего класса.
Конструктор класса ostrstreamтребует указания двух аргументов: буферной строки, в которую
будет осуществляться вывод, и размера буфера. Особенность заключается в том, что
реальный размер буферного массива может быть больше указанного, но все данные,
записываемые сверх лимита, будут отсекаться.
Итак, конструктор создал требуемый объект, связанный с буфером strbuffer(я просто назвал str). Этот объект
является обычным потоком в том смысле, что им можно управлять как и любым другим
потоком вывода, только данные будут направляться не на экран, а в буфер. Вторым действием
вызывается функция write() объекта, записывающая в поток первые 19 символов строки psz.
Оператор точка (.) в данном случае обозначает операцию доступа к члену класса. Здесь тоже
есть своя особенность: функция write() возвращает адрес потока, из которого она была
вызвана. А это, в свою очередь, означает, что мы можем тут же применить к потоку оператор вывода <<. Итого, три действия в одном выражении! Манипулятор endsкласса
ostreamвставляет в поток символ \0,служащий признаком завершения строки. Именно поэтому
в буфере было зарезервировано 20 ячеек — на единицу больше, чем количество выводимых
символов строки psz. В результате выполненных действий в буфере оказалась
сформированной готовая строка, которая, в конце концов, и направляется в поток cout.
Теперь рассмотрим, что происходит в пункте 25:
ostrstream (strbuf fer, 3) .write (psz, 2) << ends;
cout << strbuffer;
Последовательность действий та же, но резервируется не весь буфер, а только первые три
ячейки. Трюк в том, что объект cout воспринимает массив strbuffer как обычную строку, но
поскольку в третьей ячейке стоит символ \0,то получается, что строка состоит из двух
символов! В пунктах 26 и 27 используется содержимое буфера, полученное в пункте 25.
Важно также помнить, что функция width( ) оказывает влияние только на следующий за ней
оператор вывода, тогда как, например, действие функции precision() останется в силе до тех
пор, пока она не будет выполнена снова либо не будет вызван манипулятор setprecision( ) .
0
Любитель давать советы
 Аватар для Alexiski
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
02.04.2009, 17:50
Должно быть ostrstream, но надо добавить #include <strstream>
0
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
02.04.2009, 17:56  [ТС]
Цитата Сообщение от Alexiski Посмотреть сообщение
Должно быть ostrstream, но надо добавить #include <strstream>
СПАСИБО! Помогло))пока что.
1
Любитель давать советы
 Аватар для Alexiski
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
02.04.2009, 18:09
Так и нажал бы на кнопочку "спасибо"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2009, 18:09
Помогаю со студенческими работами здесь

Удалить строки, начиная со строки К1 и до строки К2 (динамические массивы)
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;stdlib.h&gt; using namespace std; int main() { srand((int)time(0)); ...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка...

Даны три строки. Определить можно ли из символов третьей строки получить первую и вторую строки
Помогите пожалуйста! 1)Даны три строки. Определить можно ли из символов третьей строки получить первую и вторую строки. 2)Дана...

Ввести строки и через n символов первой строки вставить вторую строку, и так до конца строки
Помогите исправить баг задача состоит в следующем :ввести строку и простроку тоесть две строки и надо через (n) символов первой строки...

Слить две строки, вставив символы одной строки между символами другой строки
Строка a из n символов лексикографически меньше строки b из n символов, если существует такой индекс j, что aj &lt; bj, а для всех i &lt; j...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru