 |

12.07.2022, 00:56
|
|
Постоянный
Регистрация: 20.03.2021
Сообщений: 666
С нами:
2711257
Репутация:
83
|
|
имеется вот такой код
C++:
Код:
void
Transliterate
(
char
*
str
,
char
*
newStr
)
{
for
(
;
*
str
!=
0
;
str
++
)
{
switch
(
str
[
0
]
)
{
case
'a'
:
strcat
(
&
newStr
[
0
]
,
"а"
)
;
break
;
case
'b'
:
strcat
(
&
newStr
[
0
]
,
"б"
)
;
break
;
case
'v'
:
strcat
(
&
newStr
[
0
]
,
"в"
)
;
break
;
case
'g'
:
strcat
(
&
newStr
[
0
]
,
"г"
)
;
break
;
case
'd'
:
strcat
(
&
newStr
[
0
]
,
"д"
)
;
break
;
case
'e'
:
strcat
(
&
newStr
[
0
]
,
"е"
)
;
break
;
case
'yo'
:
strcat
(
&
newStr
[
0
]
,
"ё"
)
;
break
;
case
'zh'
:
strcat
(
&
newStr
[
0
]
,
"ж"
)
;
break
;
case
'z'
:
strcat
(
&
newStr
[
0
]
,
"з"
)
;
break
;
case
'i'
:
strcat
(
&
newStr
[
0
]
,
"и"
)
;
break
;
case
'j'
:
strcat
(
&
newStr
[
0
]
,
"дж"
)
;
break
;
case
'k'
:
strcat
(
&
newStr
[
0
]
,
"к"
)
;
break
;
case
'l'
:
strcat
(
&
newStr
[
0
]
,
"л"
)
;
break
;
case
'm'
:
strcat
(
&
newStr
[
0
]
,
"м"
)
;
break
;
case
'n'
:
strcat
(
&
newStr
[
0
]
,
"н"
)
;
break
;
case
'o'
:
strcat
(
&
newStr
[
0
]
,
"о"
)
;
break
;
case
'p'
:
strcat
(
&
newStr
[
0
]
,
"п"
)
;
break
;
case
'r'
:
strcat
(
&
newStr
[
0
]
,
"р"
)
;
break
;
case
's'
:
strcat
(
&
newStr
[
0
]
,
"с"
)
;
break
;
case
't'
:
strcat
(
&
newStr
[
0
]
,
"т"
)
;
break
;
case
'u'
:
strcat
(
&
newStr
[
0
]
,
"у"
)
;
break
;
case
'f'
:
strcat
(
&
newStr
[
0
]
,
"ф"
)
;
break
;
case
'h'
:
strcat
(
&
newStr
[
0
]
,
"х"
)
;
break
;
case
'cz'
:
strcat
(
&
newStr
[
0
]
,
"ц"
)
;
break
;
case
'ch'
:
strcat
(
&
newStr
[
0
]
,
"ч"
)
;
break
;
case
'sh'
:
strcat
(
&
newStr
[
0
]
,
"ш"
)
;
break
;
case
'shh'
:
strcat
(
&
newStr
[
0
]
,
"щ"
)
;
break
;
case
'``'
:
strcat
(
&
newStr
[
0
]
,
"Ъ"
)
;
break
;
case
'`'
:
strcat
(
&
newStr
[
0
]
,
"ь"
)
;
break
;
case
'y'
:
strcat
(
&
newStr
[
0
]
,
"ай"
)
;
break
;
case
'e`'
:
strcat
(
&
newStr
[
0
]
,
"Э"
)
;
break
;
case
'yu'
:
strcat
(
&
newStr
[
0
]
,
"ю"
)
;
break
;
case
'ya'
:
strcat
(
&
newStr
[
0
]
,
"я"
)
;
break
;
case
'x'
:
strcat
(
&
newStr
[
0
]
,
"кс"
)
;
break
;
case
'w'
:
strcat
(
&
newStr
[
0
]
,
"ви"
)
;
break
;
case
'c'
:
strcat
(
&
newStr
[
0
]
,
"к"
)
;
break
;
case
'q'
:
strcat
(
&
newStr
[
0
]
,
"к"
)
;
break
;
//заглавные
case
'A'
:
strcat
(
&
newStr
[
0
]
,
"А"
)
;
break
;
case
'B'
:
strcat
(
&
newStr
[
0
]
,
"Б"
)
;
break
;
case
'V'
:
strcat
(
&
newStr
[
0
]
,
"В"
)
;
break
;
case
'G'
:
strcat
(
&
newStr
[
0
]
,
"Г"
)
;
break
;
case
'D'
:
strcat
(
&
newStr
[
0
]
,
"Д"
)
;
break
;
case
'E'
:
strcat
(
&
newStr
[
0
]
,
"Е"
)
;
break
;
case
'YO'
:
strcat
(
&
newStr
[
0
]
,
"Ё"
)
;
break
;
case
'ZH'
:
strcat
(
&
newStr
[
0
]
,
"Ж"
)
;
break
;
case
'Z'
:
strcat
(
&
newStr
[
0
]
,
"З"
)
;
break
;
case
'I'
:
strcat
(
&
newStr
[
0
]
,
"И"
)
;
break
;
case
'J'
:
strcat
(
&
newStr
[
0
]
,
"Дж"
)
;
break
;
case
'K'
:
strcat
(
&
newStr
[
0
]
,
"К"
)
;
break
;
case
'L'
:
strcat
(
&
newStr
[
0
]
,
"Л"
)
;
break
;
case
'M'
:
strcat
(
&
newStr
[
0
]
,
"М"
)
;
break
;
case
'N'
:
strcat
(
&
newStr
[
0
]
,
"Н"
)
;
break
;
case
'O'
:
strcat
(
&
newStr
[
0
]
,
"О"
)
;
break
;
case
'P'
:
strcat
(
&
newStr
[
0
]
,
"П"
)
;
break
;
case
'R'
:
strcat
(
&
newStr
[
0
]
,
"Р"
)
;
break
;
case
'S'
:
strcat
(
&
newStr
[
0
]
,
"С"
)
;
break
;
case
'T'
:
strcat
(
&
newStr
[
0
]
,
"Т"
)
;
break
;
case
'U'
:
strcat
(
&
newStr
[
0
]
,
"У"
)
;
break
;
case
'F'
:
strcat
(
&
newStr
[
0
]
,
"Ф"
)
;
break
;
case
'H'
:
strcat
(
&
newStr
[
0
]
,
"Х"
)
;
break
;
case
'CZ'
:
strcat
(
&
newStr
[
0
]
,
"Ц"
)
;
break
;
case
'CH'
:
strcat
(
&
newStr
[
0
]
,
"Ч"
)
;
break
;
case
'SH'
:
strcat
(
&
newStr
[
0
]
,
"Ш"
)
;
break
;
case
'SHH'
:
strcat
(
&
newStr
[
0
]
,
"Щ"
)
;
break
;
case
'Y'
:
strcat
(
&
newStr
[
0
]
,
"Й"
)
;
break
;
case
'E`'
:
strcat
(
&
newStr
[
0
]
,
"Э"
)
;
break
;
case
'YU'
:
strcat
(
&
newStr
[
0
]
,
"Ю"
)
;
break
;
case
'YA'
:
strcat
(
&
newStr
[
0
]
,
"Я"
)
;
break
;
case
'X'
:
strcat
(
&
newStr
[
0
]
,
"КС"
)
;
break
;
case
'W'
:
strcat
(
&
newStr
[
0
]
,
"ВИ"
)
;
break
;
case
'C'
:
strcat
(
&
newStr
[
0
]
,
"К"
)
;
break
;
case
'Q'
:
strcat
(
&
newStr
[
0
]
,
"К"
)
;
break
;
default
:
{
char
Temp
[
2
]
=
{
str
[
0
]
,
0
}
;
strcat
(
&
newStr
[
0
]
,
&
Temp
[
0
]
)
;
}
}
}
}
C++:
Код:
char
*
x
=
"chapo"
;
char
y
[
100
]
=
{
0
}
;
Transliterate
(
x
,
&
y
[
0
]
)
;
SF
->
logConsole
(
"%s"
,
y
)
выдает не "чапо", а "схапо"
можно ли как-то эту проблему решить?
|
|
|

12.07.2022, 01:31
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
Написать правильный код) Ты работаешь с байтами же и хочешь сравнить двухбайтное значение которое идет в case с однобайтным которое идет свитч. Как вариант, можно сделать вектор пару(std:  air) с где в первом елементе будут искомые символы, а во втором которые будут заменены на первые. Проходится через фор, ищем через std::string::find и заменяем через std::string::replace. Код на полную правильную работоспособность не претендует.
C++:
[CODE]
#include
#include
#include
#include
int
main
(
)
{
std
::
vector
>
vec
=
{
{
"ch"
,
"ч"
}
,
{
"a"
,
"а"
}
,
{
"p"
,
"п"
}
,
{
"o"
,
"о"
}
,
}
;
std
::
string text
=
"chapo"
;
for
(
auto
it
:
vec
)
{
size_t f
=
std
::
string
::
npos
;
do
{
size_t f
=
text
.
find
(
it
.
first
)
;
if
(
f
!=
std
::
string
::
npos
)
text
=
text
.
replace
(
f
,
it
.
first
.
length
(
)
,
it
.
second
)
;
}
while
(
f
!=
std
::
string
::
npos
)
;
}
std
::
cout
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|