- 668
- 295
имеется вот такой код
выдает не "чапо", а "схапо"
можно ли как-то эту проблему решить?
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)
выдает не "чапо", а "схапо"
можно ли как-то эту проблему решить?