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

Обмен опытом или как бы это сделали бы Вы!! - C++

Восстановить пароль Регистрация
 
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 05:09     Обмен опытом или как бы это сделали бы Вы!! #1
Здравствуйте уважаемые форумчане!
Дана задача:
Создайте класс ,напишите метод для преобразования числа типа long double денежную строку представляющее это число.Для начала Вам нужно проверить , что значение long double не очень большое. Мы предполагаем что Вы не будите пытаться преобразовать число , больше чем 9 999 999 999 999 990.00 !Затем преобразуем long double в строку (без знака $ и запятых), хранящуюся в памяти , используя объект ostrstream . Получившаяся строка должна быть помещена в буфер, называющийся допустим ustring.
Затем Вам нужно создать другую строку , начинающуюся с $, далее копируем цифру за цифрой из строки ustring , начиная с лева и вставляя запятые сначала сразу после первой далее каждые три цифры!Так же вам надо подавлять нули в начале строки.Например Вы должны вывести $1,123,43.67, а не
$0 000 000 112 343.67. Напишите функцию main() для тестирования методов класса путем многократного ввода пользователем чисел типа long double и вывода результата в виде денежной строки!
/////////////////////////////////////////////////////////////////////////////////////////////////
Я её сделал но на мой взгляд не очень красиво!Вот код:
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
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<cstring>
#include<iomanip>
using namespace std;
 
//************************************************************************************************************************
#include<windows.h>                             
ostream & operator<<(ostream & out,char*s)
{
    char buf[512],*p=buf;                                   // Г·ГІГ® ГЎГ» áûë ГђГіГ±Г±ГЄГЁГ© ÿçûê Г*Г* âûõîäå cout
    CharToOem(s,buf);
    while(*p)
        out<<*p++;
    return out;
}
//************************************************************************************************************************
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class money
{
    private:
        enum{ONE=10,TWU=30};// Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îå Г§Г*Г*Г·ГҐГ*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ*
        char mas[ONE][TWU];// Г¬Г*Г±ГЁГў î÷åðåäè
        int first;//ïåðâûé Гў î÷åðåäè
        int back;// ïîñëåäГ*ГЁГ© Гў î÷åðåäè
        void Que(char mes[]);// ïîñòГ*ГўГЁГІГј Гў î÷åðåäü
        void Qit(char mes[]);// âûâåñòè ГЁГ§ î÷åðåäè
    public:
        money():first(0),back(0)//ГЄГ®Г*ñòðóêòîð 
        {}
        void Trans(long double number);// ïåðåâîä Г·ГЁГ±Г«Г* Гў Г¬Г*Г±Г±ГЁГў
        void Result();// ïðåîáðГ*çîâГ*Г*ГЁГҐ ñòðîêè ГЄ âèäó 9,123,444.55
        void Display(char mas[])const;//âûâîä ñòðîêè Г*Г* ГЅГЄГ°Г*Г*
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
// *******************************************ГЋГЇГЁГ±Г*Г*ГЁГҐ ìåòîäîâ ГЄГ«Г*Г±Г±Г****************************************************//
void money::Que(char mes[])
{   
    
     if(back<ONE&&back>=0)
    {   
        
        strcpy(mas[back++],mes);// Г±ГІГ*ГўГЁГ¬ Г¬Г*Г±ГЁГў Гў î÷åðåäü
        
    }
    else 
    {
        cout<<" Г‚Г*ГЁГ¬Г*Г*ГЁГҐ î÷åðåäü ïîëГ*Г* Г·ГІГ® ГЎГ» ïðîäîëæèòü Г±ГІГ*ГўГЁГІГј Гў î÷åðåäü ñäåëГ*éòå âûâîä!"<<endl;
    }
}
///////////////////////////////////////////
void money::Qit(char mes[])
{   
    if(back>=0)
    {   
        if(back!=0)
        {
        
            strcpy(mes,mas[first]);
        
            for(int j=0;j<back-1;j++)//äâèãГ*ГҐГ¬ î÷åðäü
            {
                for(int f=0;f<TWU-1;f++)
                {
                    mas[j][f]=mas[j+1][f];
                }
                mas[j][f]='\0';
            }
 
            back--;//óìåГ*ГјГёГ*ГҐГ¬ ÷èñëî ïîñëåäГ*ГҐГЈГ® Гў î÷åðåäè
        }
        else
        {cout<<"\tÎ÷åðåäü ГЇГіГ±ГІГ* ïîñòГ*ГўГІГҐ Гў î÷åðåäü!"<<endl;}
    }
    
    
}
/////////////////////////////////////////////////////////////////
void money::Trans(long double number)
{   char ser[TWU];
    SystemCresh:
    if(number>9999999999999990.00)// ïðîâåðêГ* äèГ*ïîçîГ*Г* Г§Г*Г*Г·ГҐГ*ГЁГї
    {
        cout<<"\tÂâåäåГ*Г*îå Г‚Г*ìè ÷èñëî î÷åГ*Гј áîëüøîå  ГЏГ®ГЇГ°Г®ГЎГіГ©ГІГҐ ГўГўГҐГ±ГІГЁ ГҐГ№ГҐГ°Г*Г§ :";
        cin>> number;//ðóãГ*åìñÿ Г*Г* î÷åГ*Гј áîëüøîå ÷èñëî
        goto SystemCresh;//èäåì ГЄ òî÷êå SystemCresh 
    }
    else if(number>0)
    {   
    _snprintf(ser,TWU-1,"%f",number);//ïåðåâîäèì long double Гў char ser[]
    Que(ser);// ïîìåùГ*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГҐ _mas Гў ГЎГіГґГҐГ°
 
    }
    else
    {cout<<"\tÂâåäåГ*Г*îå Г‚Г*ìè ÷èñëî ìåГ*ГјГёГҐ Г*óëÿ  ГЏГ®ГЇГ°Г®ГЎГіГ©ГІГҐ ГўГўГҐГ±ГІГЁ ГҐГ№ГҐГ°Г*Г§ :";
        cin>> number;//ðóãГ*åìñÿ Г*Г*  Г·ГЁГ±Г«Г® <0
        goto SystemCresh;//èäåì ГЄ òî÷êå SystemCresh 
    }
}
//////////////////////////////////////////////////////////////////
void money::Display(char mas[])const
{
        cout<<"\tÐåçóëüòГ*ГІ : "<<mas<<endl;
    
}
/////////////////////////////////////////////////////////////////////////
void money::Result()
{   int x,z;
    char _mas[TWU]="$";// ГЁГ*èöèГ*ëèçèðóåì ïåðâûé ñèìâîë Г§Г*Г*Г·ГҐГ*ГЁГҐГ¬ $
    char nuw[TWU];// Г*îâûé Г¬Г*Г±Г±ГЁГў
    Qit(nuw);//âîçâðГ*Г№Г*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГҐ ГЁГ§ î÷åðåäè(ГЎГіГґГҐГ°Г*)
    x=strlen(nuw);//âîçâðГ*Г№Г*ГҐГ¬ êîëè÷åñòâî ñèìâîëîâ
    for(int i=0, j=1;i<x;i++,j++)//ïðåîáðГ*çîâûâГ*ГҐГ¬ ñòðîêó ГЄ âèäó ГЇГ® óñëîâèþ Г§Г*Г¤Г*Г·ГЁ
    {   
        if(nuw[i]=='.')
        {z=5;}
        if(z!=5)
        {   _mas[j]=nuw[i];
            
            if(j==1&&nuw[i+1]!='.')
            {strcat(_mas,",");j++;}//ïðè âûïîëГ*ГҐГ*ГЁГЁ óñëîâèÿ ïðèêëåèâГ*ГҐГ¬ Г§Г*ГЇГїГІГіГѕ ГЅГІГ® äëÿ Г*ГҐ Г±ГІГ*Г*Г¤Г*ðòГ*îé Г§Г*ïÿòîé $1, 
            else if((j-1)%4==0&&nuw[i+1]!='.')//ïðè âûïîëГ*ГҐГ*ГЁГЁ óñëîâèÿ ïðèêëåèâГ*ГҐГ¬ Г§Г*ГЇГїГІГіГѕ ГЅГІГ® äëÿ ГўГ±ГҐГµ îñòГ*ëüГ*ûé Г§Г*ïÿòûõ $1,323,343,123.50
            {strcat(_mas,",");j++;}
        }
        else if(z==5&&nuw[i]!='0')
        {
            _mas[j]=nuw[i]; 
        }
    }
    _mas[j]='\0';//ïðîïèñûâГ*ГҐГ¬ Г*óëåâîé ñèìâîë
    Display(_mas);//âûâîä Г*Г* ГЅГЄГ°Г*Г*
    
}
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
//************************************************ÏðîâåðêГ* ГЄГ«Г*Г±Г±Г* Гў Main*************************************************//
int main()
{   money x;
    char ch=' ';
    int temp=0;
 long double  number;
 
    
    do
    {
        cout<<"\tÂâåäèòå ÷èñëî : ";
        cin>>number;
        x.Trans(number);
        temp++;
        cout<<"\tГ—ГІГ® ГЎГ» Г§Г*ГЄГ®Г*ГјГ·ГЁГІГј ââîä Г*Г*æìèòå --> n :";
        cin>>ch;
 
    }while(ch!='n');
    for(int i=0;i<temp;i++)
    {
        x.Result();
    }
    
 
        system("pause");    
    return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////
Как бы это сделали бы Вы!ТОЛЬКО БОЛЬШАЯ ПРОСЬБА я ещё только учусь и для решения этой задачи я пришёл только лишь со знаниями о классах, массивах,функциях.Указатели, потоки, перегрузки и тд еще не изучал!
Если можно пишите тоже по простому!Да кстати код полностью рабочий, писал на оболочке С++ 6.0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2011, 05:09     Обмен опытом или как бы это сделали бы Вы!!
Посмотрите здесь:

C++ Как проверить число это или нет (Dev C++)????
Int как char[5] - это нормально или ужасно? C++
C++ как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке c=a+b,c;
Вылавливание(или как это ещё назвать?:) буквы из строки C++
C++ Простые числа, или как это работает?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
07.01.2011, 13:34     Обмен опытом или как бы это сделали бы Вы!! #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Класс еще хранит некую очередь из лонг-даблов?

Вам надо серьезно поработать над стилем.
Имейте в виду, что крайне полезно разделять ввод данных и обработку данных. Например, не стоит делать класс, который использует ввод/вывод данных, если этот класс не предназначен именно для ввода/вывода данных.
Не стоит использовать метки по огромному количеству причин, например, потому, что это затрудняет чтение программы. Условных переходов всегда достаточно.

Если абстрагироваться от указанных технологий, я бы реализовал задачу совсем по-другому.
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
#include <cmath>
#include <cstddef>
#include <cstdio>
#include <string>
 
using std::string;
 
class Money {
 public:
  Money() : value_(0.0) {}
  explicit Money(long double value) : value_(value) {}
 
  // безусловно, не самая лучшая реализация, на скору руку
  string ToFormattedString(const string &thousands_separator,
                  const int &decimals) const {
    if (value_ < 0.000001)
      return string("0.00");
    string result = "";
 
    long int temporary_value = value_ * pow(10., decimals);
 
    for (int i = 0; i < decimals; ++i) {
      result = static_cast<char>((temporary_value % 10) + '0') + result;
      temporary_value /= 10;
    }
    result = '.' + result;
 
    size_t counter = 0;
    while (temporary_value > 0) {
      result = static_cast<char>((temporary_value % 10) + '0') + result;
      temporary_value /= 10;
      ++counter;
      if ((counter % 3 == 0) && (temporary_value > 0))
        result = thousands_separator + result;
    }
    return result;
  }
 
  long double GetValue() const { return value_; }
  void SetValue(long double const &new_value) { value_ = new_value; }
 private:
  long double value_;
};
 
int main(int argc, char *argv[]) {
  // пример
  Money a(1100.11);
  printf("%s", a.ToFormattedString(",", 2).c_str());
 
  int key;
  scanf("%d", &key);
}
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
07.01.2011, 15:42     Обмен опытом или как бы это сделали бы Вы!! #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
#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
 
#define MAXNUM 9999999999900.00
#define NUM 2 // число цифр после запятой
 
void error(std::string err_msg)
{
  std::cerr << err_msg << std::endl;
}
 
class Money
{
public:
  Money():value(0){}
  Money(double v);
  void print() const;
  std::string to_string() const;
  bool set(const double& v);
private:
  bool valid(const double& v) const;
  double value;
};
 
Money::Money(double v)
{
  if(!set(v)) 
    {
      error("Ошибка инициализации.");
      value=0;
    }
}
 
bool Money::valid(const double& v) const
{
  if(v>MAXNUM) return false;
  return true;
}
 
bool Money::set(const double& v)
{
  if(valid(v)) value = round(v*pow(10,NUM))/pow(10,NUM);
  else return false;
  return true;
}
 
void Money::print() const
{
  std::cout << "$ " << to_string()<<std::endl;
}
 
 
std::string Money::to_string() const
{
  double tmp=value*pow(10,NUM);//избавляемся от дробной части
  std::string str;
  str+=char(fmod(tmp,10) + '0');
  while(int(tmp/=10)) 
    {
      if(str.length()==NUM)str+='.';
      else if( str.length()>=NUM+3 && !((str.length()-NUM)%4) ) str+=',';
      str+=char(fmod(tmp,10) + '0');
    }
  std::reverse(str.begin(),str.end());
  return str;
}
 
int main()
{
  Money m(12345678910.1155);
  m.print();
}
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 16:53  [ТС]     Обмен опытом или как бы это сделали бы Вы!! #4
Большое спасибо что вы посмотрели эту тему! Но есть маленькая просьба Я ЖЕ ПРОСИЛ РЕАЛИЗОВЫВАТЬ КОД НА С++! Раньше как я слышал в институтах перед изучением С++ изучали С! Но теперь этого не делают так как С++ обошел С по многим параметрам и возможностям(хотя иногда проигрывает по скорости выполнения)! В итоге мне не известно для чего вы перед конструктором пишете explicit!Так же я писал в самом начале что не изучал ещё указатели!Если Вам не трудно пожалуйста напишите программу чисто не С++
без смешивания языков!(Заместо #define const ну и так далие)
ДА К СТАТИ КЛАСС ДОЛЖЕН ХРАНИТЬ ЗНАЧЕНИЕ НЕ ИЗ LONG DOUBLE А ИЗ УЖЕ ПЕРЕВЕДЕНОГО ЗНАЧЕНИЯ В CHAR MAS[]
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
07.01.2011, 17:06     Обмен опытом или как бы это сделали бы Вы!! #5
Цитата Сообщение от stawerfar Посмотреть сообщение
Я ЖЕ ПРОСИЛ РЕАЛИЗОВЫВАТЬ КОД НА С++!
Это и есть С++

Цитата Сообщение от stawerfar Посмотреть сообщение
В итоге мне не известно для чего вы перед конструктором пишете explicit!
excplict гарантирует неиспользование конструктора в качестве оператора приведения типа.
Это чисто C++ная фишка.

Цитата Сообщение от stawerfar Посмотреть сообщение
без смешивания языков!(Заместо #define const ну и так далие)
Дефайн это тоже C++
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
07.01.2011, 17:17     Обмен опытом или как бы это сделали бы Вы!! #6
без смешивания языков!(Заместо #define const ну и так далие)
чем вам не нравится define? Директивы препроцессора используются как в си, так и в си++, и это инструкция для компилятора, от языка в она не зависит.
Препроцессорные директивы в C/C++ (#include, #define и прочее)
C++
1
2
#define MAXNUM 9999999999900.00
#define NUM 2 // число цифр после запятой
Можете заменить их на
C++
1
2
const int NUM=2;
const double MAXNUM=9999999999900.00;
Добавлено через 6 минут
ДА К СТАТИ КЛАСС ДОЛЖЕН ХРАНИТЬ ЗНАЧЕНИЕ НЕ ИЗ LONG DOUBLE А ИЗ УЖЕ ПЕРЕВЕДЕНОГО ЗНАЧЕНИЯ В CHAR MAS[]
Текущий вариант по мне рациональней. текстовое представление необходимо только пользователю, а любая арифметическая операция, намного проще описывается именно в данном представлении.
И как вы собираетесь использовать динамический массив без указателей? Или хотите сразу создать длиной в 24 символа ?
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
07.01.2011, 17:52     Обмен опытом или как бы это сделали бы Вы!! #7
Цитата Сообщение от stawerfar Посмотреть сообщение
Я ЖЕ ПРОСИЛ РЕАЛИЗОВЫВАТЬ КОД НА С++!
Я писал для С++ стандарта 99 года. ) На чистом С классов нет совсем.

Цитата Сообщение от stawerfar Посмотреть сообщение
В итоге мне не известно для чего вы перед конструктором пишете explicit!
Это указание компилятору не использовать такой конструктор для конвертации типов.

Цитата Сообщение от stawerfar Посмотреть сообщение
Если Вам не трудно пожалуйста напишите программу чисто не С++
без смешивания языков!
Без смешивания языков никак. Создатель языка С++ сам определяет свое детище как "лучший С" (better C). Большая часть языка C++ есть и в С.

Цитата Сообщение от stawerfar Посмотреть сообщение
ДА К СТАТИ КЛАСС ДОЛЖЕН ХРАНИТЬ ЗНАЧЕНИЕ НЕ ИЗ LONG DOUBLE А ИЗ УЖЕ ПЕРЕВЕДЕНОГО ЗНАЧЕНИЯ В CHAR MAS[]
Да, я думал о варианте кэширования переменной в виде посимвольного представления числа, но решил, что подобный выпендреж вам будет не понятен. ) И да, там бы я тоже использовал динамическое выделение памяти.
Вообще, если не брать С++ модуль strings, без указателей и динамической памяти в такой программе обойтись довольно сложно.

Кстати, в вашем коде указатели используются.
Цитата Сообщение от stawerfar Посмотреть сообщение
ostream & operator<<(ostream & out,char*s)
{
char buf[512],*p=buf; // что бы был Русский язык на выходе cout
CharToOem(s,buf);
while(*p)
out<<*p++;
return out;
}

Не по теме:

Что за звездочки в цитате кода?!

stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 17:54  [ТС]     Обмен опытом или как бы это сделали бы Вы!! #8
Дефайн это тоже C++[/QUOTE] Ну не знаю допустим Лафоре пишет
константы можно определять с помошью директивы процессора #difine , не смотря на то что такой способ не рекомендуется употреблять в С++ . Деректива #difine не делает различий между числами и символьными строками.Такая конструкция долгое время была популярна в языке С . Однако отсутствие типа у подобных переменных может привести к некорректной работе программы , и по этому даже в С был предложен способ, использующий слово const.
vx5
07.01.2011, 17:56
  #9

Не по теме:

Цитата Сообщение от lemegeton Посмотреть сообщение

Не по теме:

Что за звездочки в цитате кода?!

там еще и перегрузка оператора

stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 18:10  [ТС]     Обмен опытом или как бы это сделали бы Вы!! #10
Да вы правы используется указатель для того чтобы можно было вывести русский
но это нам дали в институте но пока мы не проходили сами указатели как таковые!Это просто готовый код который я еще не знаю.

Добавлено через 10 минут
Да и ещё один вопрос как например предотвратить выход за приделы допустимых значений переменных!?
Например пользователь вводит число любого типа (double,int long double) а я должен проверить не указал ли пользователь число которое больше диапазона допустимых значений! Если это double то не вышел ли он за приделы 1.7*10^-308 точность 15?Есть ли встроенные функции для этих целей?
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
07.01.2011, 18:19     Обмен опытом или как бы это сделали бы Вы!! #11
Цитата Сообщение от stawerfar Посмотреть сообщение
Ну не знаю допустим Лафоре пишет
константы можно определять с помошью директивы процессора #difine , не смотря на то что такой способ не рекомендуется употреблять в С++ . Деректива #difine не делает различий между числами и символьными строками.Такая конструкция долгое время была популярна в языке С . Однако отсутствие типа у подобных переменных может привести к некорректной работе программы , и по этому даже в С был предложен способ, использующий слово const.
по мне единственное неудобство, которое может быть от дефайна в больших программах связано с отладкой.
C++
1
2
3
4
5
#define N 12345
/*
*/
int x;
if(x=N); //опа,очепятка
В такой программе компилятор тебе укажет что ошибка в некоторой инструкции x=12345, а у тебя в коде там вроде как N стоит, может сбить с толку. Компилятор подменяет все N указанным значением и компьютер видит программу уже иначе
Определяя переменную вы определяете ей ячейку в памяти, а здесь вы даете инструкцию компилятору. Это разные вещи и каждый из этих способов имеет право на существование
З.Ы: Хотя в С++ глобальные константы, кажется, реализуются тоже без выделения памяти.

Добавлено через 4 минуты
и если уж пошло про смесь языков, то это скорее у вас:
C++
1
2
strcpy(mas[back++],mes);
strlen(nuw);
это функции работы с с-шными строками, в плюсах используют класс string.
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 18:29  [ТС]     Обмен опытом или как бы это сделали бы Вы!! #12
Вполне возможно!Как и char был унаследован у С. char остался так как например string не работает с Русским языком и это лишь одна из причин по которой продолжают использовать
С++!
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
07.01.2011, 18:35     Обмен опытом или как бы это сделали бы Вы!! #13
Цитата Сообщение от stawerfar Посмотреть сообщение
Вполне возможно!Как и char был унаследован у С. char остался так как например string не работает с Русским языком и это лишь одна из причин по которой продолжают использовать
С++!
да ты что ? у меня стринг всегда прекрасно работал с русскими буквами.
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 18:45  [ТС]     Обмен опытом или как бы это сделали бы Вы!! #14
это смотря какие методы класса string вы использовали. Вот например
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<iostream>
#include<string>
using namespace std;
 
 
#include<windows.h>
ostream & operator<<(ostream & out,char*s)
{
    char buf[512],*p=buf;
    CharToOem(s,buf);
    while(*p)
        out<<*p++;
    return out;
}
 
int main()
{       //ââåäåГ*ûå ñëîâГ* Г*ГҐ îòîáðГ*Г¦Г*ГѕГІГ±Гї Г*Г* ðóñêîì
            string s1="Ïðèâåò";
            cout <<s1<<endl;
    // Г* ГІГ*ГЄ Г¤Г*
            char mas[]="Ïðèâåò";
            cout<<mas<<endl;
 
        system("pause");
    return 0;
}
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
07.01.2011, 18:53     Обмен опытом или как бы это сделали бы Вы!! #15
у меня все работает
Миниатюры
Обмен опытом или как бы это сделали бы Вы!!  
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 18:58  [ТС]     Обмен опытом или как бы это сделали бы Вы!! #16
А вы не могли бы
C++
1
вот так выложить код! плохо видно!
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
07.01.2011, 18:59     Обмен опытом или как бы это сделали бы Вы!! #17
видимо у вас проблема в настройке форточки как видите, на линуксе все прекрасно работает, даже без перегрузки оператора.

Добавлено через 52 секунды
я просто скопировал ваш код и вырезал из него виндосовскую ересь и на картиночку можно нажать - она увеличится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2011, 19:02     Обмен опытом или как бы это сделали бы Вы!!
Еще ссылки по теме:

Обмен опытом по программированию на С++ C++
C++ Это обьект, переменная или что? Как то вовсе непонятно

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

Или воспользуйтесь поиском по форуму:
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
07.01.2011, 19:02  [ТС]     Обмен опытом или как бы это сделали бы Вы!! #18
спасибо буду знать!
Yandex
Объявления
07.01.2011, 19:02     Обмен опытом или как бы это сделали бы Вы!!
Ответ Создать тему
Опции темы

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