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

Проблемы с вводом/выводом кирилицы в консоли - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ объединения нескольких массивов http://www.cyberforum.ru/cpp-beginners/thread37376.html
Написать программу для объединения нескольких массивов, m - количество массивов, которые подлежат объединению; s -масив указаний на массивы; массив dim -мистить размеры данных массивов. Память под массивы выделить динамически; masyv - результирующий массив.
C++ Структуры: вывести информацию о стипендии любого заданного студента Во входном файле записать ведомость на стипендию студентов Вашей группы, где входит фамилия, имя, по-батькови и размер стипендии. Составить программу что выведет информацию о стипендии любого заданного студента. stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> int main(void) { printf("-------------------------------\n"); FILE *fp; struct http://www.cyberforum.ru/cpp-beginners/thread37375.html
C++ Структуры.(не получаеться)
У вхідному файлі записати відомість на стипендію студентів Вашої групи, де входить прізвище, ім’я, по-батькові і розмір стипендії. Скласти програму що виведе інформацію про стипендію будь-якого заданого студента. #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> int main(void) { printf("-------------------------------\n"); FILE *fp;
Непонятный выход за пределы подстроки C++
Делаю функцию,заполняющую map.Пока это только прототип для одного элемента,потом задам цикл,или вообще придётся переписать с использованием потоков(стоит это делать?).Выдаёт ошибку на этапе выполнения-весьма неприятно.void map_filler(map<string,float>&m) { string str,float_substr,name_substr; getline(cin,str); name_substr=str.substr(str,str.find_first_of(' '));//qw 4.567 - this...
C++ Правая треугольная Матрица!!!!Умножение матриц!!! http://www.cyberforum.ru/cpp-beginners/thread37357.html
Ввести размерность матрицы N даны 2 правые треугольные матрицы А и В,размерности N, вида: 1 2 3 4 5 5 6 7 8 7 8 9 8 9 1 Найти матрицу С, тоже правую треугольную. Вот мой код, проблема в том, что вместо вводимых чисел пользователем выводится числа из памяти:ПОМОГИТЕ ПОЖАЛУЙСТА!!!
C++ Проверка на количество элементов матрицы Как сделать проверку на количество элементов матрицы в файле, то есть, например, если размерность матрицы 3х3, а количество элементов всего 5. Оставшиеся элементы будут нули. А как так сделать, чтобы вместо нулей программа вылетела??? подробнее

Показать сообщение отдельно
lagun
0 / 0 / 0
Регистрация: 06.05.2009
Сообщений: 7

Проблемы с вводом/выводом кирилицы в консоли - C++

30.05.2009, 23:30. Просмотров 1032. Ответов 6
Метки (Все метки)

Прога осуществляет поиск строки по маске.
как сделать чтобы программа принимала русские символы, искала их и выводила в файл.

даже при установке функции
setlocale(LC_CTYPE, ".1251"); или ".866"
wcout выводит некорректные символы.
как заставить программу корректно работать с русским языком.
Пробовал С++ билдеры 6.0 и 2009 отдно и тоже.
Помогите, буду очень благодарен.

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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
#include <iostream>
#include <fstream>
#locale <locale>
using namespace std;
 
 
//вывод сообщения об ошибке
int error(char er[]);
//вывод результата поиска
int resultOut (char * pfileName, char * pst,int stPos,int * pcolspace );
//обход пробела в выходной строке
int Spa (char * pfileName, char * pst,int stPos,int * pcolspace );
//вставка
inline End (char * pfileName)
{   ofstream OutputFile;
    OutputFile.open(pfileName,ios::app);
    OutputFile << endl;
    OutputFile.close();
};
 
 
 
int main ()
{
/************************* ПЕРЕМЕННЫЕ **************************************************/
 
 
    int LenKey=0;           // Длинна искомой строки
 
    const keySize = 1000;
    char erin []= "input" ;
    char erout [] = "output" ;
    char  Key[keySize];     // Искомая строка
    char inFile[50];    // Имя входного файла
    char outFile[50];   //Имя выходного файла
    char  Str [200];    // Буфер для  строки
    int index;
    int LenStr;
    int endPos = 0;                 //позиция исходной
    int space = 0;
    int colspace = 0;
    int fin=0;
 
/************************* ВВОДИМЫЕ ЗНАЧЕНИЯ ******************************************/
go: cout << "Enter input file name: ";
    cin.getline(inFile,50);             // Вводим имя файла
    cout << endl;
    cout << "Enter output file name: ";
    cin.getline(outFile,50);                // Вводим имя файла
    cout << endl;
    //cin.get();
    cout << "Enter find text: ";
    cin.getline(Key,keySize);           // Вводим то, что ищем
 
/******************** ПОЛУЧЕНИЕ СТРОКИ ИЗ ФАЙЛА *******************************/
    ofstream OutputFile;            // Открываем выходной файл
    OutputFile.open(outFile,ios::out);
    if (OutputFile.is_open()!= true)   //если файл не открылся
        {
            if (error(erout) == 1)       //запустить функцию
                goto go;
            return 2;
        }
    OutputFile.close();             //закрыть файл
 
 
 
    ifstream InputFile(inFile); // Открываем входной файл
 
    while (! InputFile.eof())       // Читаем строки пока не закончился файл
    {
        if (InputFile.fail())       // Если файл не открыватся, тогда ошибка
            {
                if (error(erin) == 1)       //запустить функцию
                    goto go;
                return 1;
            }
        else
 
        InputFile.getline (Str, 200);   // Получаем символы
    //  Str = CharBuf;                                  // Запихиваем символы в строку
 
 
 
/************************* ПОИСК **********************************************/
        LenKey = strlen(Key);
        LenStr = strlen(Str);
        endPos = 0;                //позиция исходной
        space = 0;
        colspace = 0;
        fin=0;
        index = 0;
 
        while (LenKey > fin)
        {
            if (Key[fin] == ' ' )
                 colspace++;
            if (Key[fin] == '*' || Key[fin] == '?')
                 index++;
 
            fin++;
 
        }
//если искомая строка состоит только из ? и * то вывести содержимое входного файла
        if (index == LenKey )
        {
            OutputFile.open(outFile,ios::app);
            while (Str[endPos]!='\0')
                    OutputFile << Str[endPos++];
            OutputFile.close();
        }
        //if (LenKey == 1 && Key[0]== '?')
 
restart:while (endPos < LenStr)
        {
            if (Str[endPos]==' ') space = endPos+1; //первый пробел
            fin = 0;
            while((Key[fin]!='\0')&& (Key[fin] == Str[endPos] || Key[fin] == '*' || Key[fin] == '?'))
            {
                //==============любой символ====================================
                if (Key[fin] == '?')
                    if (fin == (LenKey-1))
                        {
                            do
                            {
                                    space = resultOut(outFile,Str,space,&colspace);
                            } while(Str[space]!= ' ' && space < LenStr);
                         endPos = space++;
                         End (outFile);
                         goto restart;
                        }
                //===========любое количество любых символов====================
                if (Key[fin] == '*')
                {
                    if (fin >= (LenKey-1))
                        {
                        OutputFile.open(outFile,ios::app);
                            do
                            {
 
                                OutputFile << Str[space];
 
                            } while(Str[++space]!='\0');
                        OutputFile.close();
                        End (outFile);
                        endPos = space;
                        goto restart;
 
                        }
                    endPos++;
                    do
                    {
                        fin++;
                    }while(Key[fin] == '?' || Key[fin] == '*');
 
 
 
                    if (fin > (LenKey-1))
                        {
                        OutputFile.open(outFile,ios::app);
                            do
                            {
 
                                OutputFile << Str[space];
 
                            } while(Str[++space]!='\0');
                        OutputFile.close();
                        End (outFile);
                        endPos = space;
                        goto restart;
 
                        }
                    while(Key[fin]!=Str[endPos] && endPos < LenStr)
                            endPos++;
                }
                //============================================================
                if (Key[fin] == Str[endPos])
                    if (fin == (LenKey-1))
                        {
                            do
                            {//вывод результата поиска
                                space = resultOut(outFile,Str,space,&colspace);
 
                            } while((Str[space]!= ' ' || endPos > space) && space < LenStr );
                        endPos = space ;
                        space++;
                        End (outFile);
                        goto restart;              //
                        }
                     else if (endPos == (LenStr-1))  //входная строка закончилась
                                goto start;          //перейти на старт
 
                fin++;
                if  (endPos < LenStr-1)
                        { endPos++; }
                    else goto start;
            }
start:  endPos++;
 
        }
     }
 
    cout << "Press enter to exit program";
 
    cin.get();
    return 0;
}
 
 
//вывод сообщения об ошибке
int error(char er[])
{
    cout << endl << endl;
    cerr << "*********** Error open " << er << " file ***********" << endl;
    cout << endl;
    cout << "Press <1> to retry or <any key> to exit ";
    char ch;
    cin.get(ch);
    cin.get();
    if (ch == '1')
         {return 1;}
    else return 2;
}
 
//вывод результата поиска
int resultOut (char * pfileName, char * pst,int stPos,int * pcolspace )
{
    ofstream OutputFile;            // Открываем файл
    OutputFile.open(pfileName,ios::app);
    OutputFile << pst[stPos];
    OutputFile.close();
    stPos++;
    if (pcolspace > 0)
    {
        stPos = Spa( pfileName, pst, stPos, pcolspace);
    }
    return stPos;
}
 
 
//удаление пробелов
int Spa (char * pfileName, char * pst,int stPos,int * pcolspace )
{
 
    if ((*pcolspace > 0) && (pst[stPos] == ' ') )
    {
        ofstream OutputFile;            // Открываем файл
        OutputFile.open(pfileName,ios::app);
        OutputFile << pst[stPos];
        OutputFile.close();
        stPos++;
        *pcolspace = *pcolspace - 1;
        stPos = Spa(pfileName, pst,stPos,pcolspace);
        return stPos;
    }
    else  return stPos;
 
}


ps. не судите строго, я только начитаю учить с++

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