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

Русский язык - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
22.09.2013, 18:09     Русский язык #1
Нужно написать программу, которая исправляла бы ошибки после Ж,Ч,Ш,Щ(Ы,Я,Ю на И,А,У).
Учитывая исключения: Жюри, Брошюра, парашют.
Помогите вот код, но почему он не работает?
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
#include <conio.h>
#include <string.h>
#include <stdio.h>
int main ()
{
    char q[200];
    printf ("vvedite stroku\n");
    gets(q);
    int n=strlen(q);
    for (int i=0; i<n; i++) {
        if ((q[i+1]!=' ') && (q[i]!=' ')) {
                    if ((q[i+1]=='ж') && (q[i+3]=='ю') && (q[i+3]=='р') && (q[i+4]=='и')) { i+=4; continue;}
                    if ((q[i+1]=='б') && (q[i+2]=='р') && (q[i+3]=='о') && (q[i+4]=='ш') && (q[i+5]=='ю') && (q[i+6]=='р') && (q[i+7]=='а')) { i+=7; continue;} 
                    if ((q[i+1]=='п') && (q[i+2]=='а') && (q[i+3]=='р') && (q[i+4]=='а') && (q[i+5]=='ш') && (q[i+6]=='ю') && (q[i+7]=='т')) { i+=7; continue;} 
                    continue;
                    }             
        if ((q[i]=='ж') || (q[i]=='Ж') || (q[i]=='ш') || (q[i]=='Ш')) {
                if ((q[i+1]=='ы') || (q[i+1]=='Ы')) {q[i+1]='и'; i++;}
                if ((q[i+1]=='ю') || (q[i+1]=='Ю')) {q[i+1]='у'; i++;}
                else i++;
                }
        if (q[i]=='ч' || q[i]=='Ч' || q[i]=='щ' || q[i]=='Щ') {
                if ((q[i+1]=='я') || (q[i+1]=='Я')) {q[i+1]='А'; i++;}
                if ((q[i+1]=='ю') || (q[i+1]=='Ю')) {q[i+1]='У'; i++;}
                else i++;}
        else i++;                
        }
    printf(q);
    getch ();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 18:09     Русский язык
Посмотрите здесь:

C++ Русский Язык!!!
Русский язык в C++ C++
русский язык C++
Русский язык C++
C++ русский язык
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 18:15     Русский язык #2
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
22.09.2013, 18:16  [ТС]     Русский язык #3
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console
А по другому никак?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 18:19     Русский язык #4
Цитата Сообщение от Toshik_ Посмотреть сообщение
А по другому никак?
Можно сложнее.
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
22.09.2013, 18:22  [ТС]     Русский язык #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Можно сложнее.
Можешь помочь?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 18:23     Русский язык #6
Цитата Сообщение от Toshik_ Посмотреть сообщение
Можешь помочь?
В чём?
vladyxa13
 Аватар для vladyxa13
4 / 1 / 0
Регистрация: 15.09.2013
Сообщений: 21
22.09.2013, 18:23     Русский язык #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Можно сложнее.
C++
1
setlocale(LC_ALL, "rus");
На русский консоль переводит, но надо подключать библеотеку
C++
1
#include <conio.h>
В сетлокала есть свои недостатки.
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
22.09.2013, 18:24     Русский язык #8
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console
setlocale(0, "ASCII") чем плох? И никакой библиотеки не надо подключать.
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
22.09.2013, 18:25  [ТС]     Русский язык #9
Цитата Сообщение от alsav22 Посмотреть сообщение
В чём?
В написании кода... так чтобы не пришлось менять настройки консоли?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 18:27     Русский язык #10
Цитата Сообщение от Бендерродригез Посмотреть сообщение
setlocale(0, "ASCII") чем плох?
Ввода нет, только вывод.

Добавлено через 1 минуту
Цитата Сообщение от Toshik_ Посмотреть сообщение
В написании кода... так чтобы не пришлось менять настройки консоли?
Не знаю, как это можно сделать.

Добавлено через 1 минуту
Цитата Сообщение от vladyxa13 Посмотреть сообщение
На русский консоль переводит, но надо подключать библеотеку
Только вывод, подключать (в студии) ничего не нужно.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 18:28     Русский язык #11
Цитата Сообщение от vladyxa13 Посмотреть сообщение
На русский консоль переводит,
лишь устанавливает локаль и не более...
Цитата Сообщение от vladyxa13 Посмотреть сообщение
но надо подключать библеотеку
мастер подключения библиотек?
Во-первых, это не библиотека,
во-вторых, setlocale в другом файле объявлена
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 19:00     Русский язык
Еще ссылки по теме:

Русский язык C++
Не работает русский язык C++
C++ Не воспринимает русский язык

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

Или воспользуйтесь поиском по форуму:
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
22.09.2013, 19:00  [ТС]     Русский язык #12
нашел код еще
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
#include <iostream>
#include <locale.h> 
#include "windows.h"
 
int main()
{ setlocale(LC_ALL,"russian_russia.866");
    
 char str[256];
 char str1[]="жы";            
 char str2[]="жи";
 char str3[]="шы";
 char str4[]="ши";
 char str5[]="чя";
 char str6[]="ча";
 char str7[]="щя";
 char str8[]="ща";
 char str9[]="чю";
 char str10[]="чу";
 char str11[]="щю";
 char str12[]="щу";
 int strlength;
 int l,n;
 int isupper(char str);
 wprintf(L"%s", L"Введите строку для проверки:\n");
 gets(str); 
 //us(str);
 strlength=strlen(str);
   for(n=0;n<strlength;n++)
   {   for(l=0;l<3;l++)
                 {      if(str[n]==str1[l])
                                str[n]=str2[l];
                        if(str[n]==str3[l])
                                str[n]=str4[l];
                        if(str[n]==str5[l])
                                str[n]=str6[l];
                        if(str[n]==str7[l])
                                str[n]=str8[l];
              if(str[n]==str9[l])
                                str[n]=str10[l];
                        if(str[n]==str11[l])
                                str[n]=str12[l];       }   }
    wprintf(L"%s", L"Строка после проверки:\n");
   printf(str);
   wprintf(L"%s", L"\n");
system("pause");
 return 0;}
но теперь он выдает не тот результат

Добавлено через 21 минуту
А в этом коде выдает ошибку
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
#include <stdio.h>
#include <ctype.h>
#include <wchar.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <locale.h>
#include <windows.h>
 
/* В русском языке, после букв Ж, Ч, Ш,Щ пишется И, А, У, а не Ы, Я, Ю. Проверить */
/* заданный текст на соблюдение этого правила и исправить ошибки (с учетом */
/* исключений: ЖЮРИ, БРОШЮРА, ПАРАШЮТ)
 */
 
 
static const wchar_t *pat_start = L"ЖЧШЩ";
static const wchar_t *pat_letters = L"ЫЯЮ";
static const wchar_t *pat_replace = L"ИАУ";
 
static const wchar_t *ignored_words[] = {
    L"ЖЮРИ", L"БРОШЮР", L"ПАРАШЮТ", NULL
};
 
wchar_t *find_next_word(const wchar_t *text)
{
    while(*text != L'\0' && !iswalpha(*text))
        ++text;             /* Skip non-alphabetic letters */
 
    return (wchar_t *) (*text == L'\0' ? NULL : text);
}
 
wchar_t *find_end_of_word(const wchar_t *text)
{
    while(*text != L'\0' && iswalpha(*text))
        ++text;             /* Ignore current word */
 
    return (wchar_t *) text;
}
 
int ignored(const wchar_t *word)
{
    size_t i;
    for(i = 0; ignored_words[i] != NULL; ++i)
        if(wcsstr(word, ignored_words[i]) != NULL)
            return 1;
    return 0;
}
 
wchar_t *correct_errors(wchar_t *word)
{
    wchar_t *pch = word;
    wchar_t *pend;
    wchar_t end_char;
 
    if(word == NULL)
        return NULL;
 
    pend = find_end_of_word(word);
    end_char = *pend;
    *pend = L'\0';
 
    /* Search all errors: */
    while(*pch != L'\0')
    {
        wchar_t *found;
 
        /* Find the beginning of a pattern */
        pch = wcspbrk(pch, pat_start);
        if(pch == NULL)
            break;
 
        /* Determine if there is an error */
        if((found = wcschr(pat_letters, pch[1])) != NULL)
        {
            ptrdiff_t offset = found - pat_letters;
            ++pch;
 
            /* Skip ignored words */
            if(!ignored(word))
                *pch = pat_replace[offset];
        }
        ++pch;
    }
 
    *pend = end_char;
 
    return *pend == L'\0' ? NULL : pend;
}
 
int main(void)
{
    wchar_t *word, buf[BUFSIZ];
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    setlocale(LC_ALL, "");
 
    fputws(L"Enter text to correct:\n", stdout);
 
    fgetws(buf, BUFSIZ, stdin);
 
    for(word = find_next_word(buf);
        word != NULL;
        word = correct_errors(find_next_word(word)))
    {
        /* No-op */
    }
 
    fputws(L"Text after correction:\n", stdout);
    fputws(buf, stdout);
 
    exit(EXIT_SUCCESS);
}

error C2440: =: невозможно преобразовать "const wchar_t *" в "wchar_t *"

Добавлено через 9 минут
народ помогите!!!
Yandex
Объявления
22.09.2013, 19:00     Русский язык
Ответ Создать тему
Опции темы

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