Ошибки "multi-character character constant [-Wmultichar] и "overflow in conversion from ‘int’ to ‘char’ changes value from ‘53643’ to ‘'\377777"
Мой код должен выводить выводить транскрипции слов во входном файле. Но вместо этого выдает предупреждения типа: "overflow in conversion from ‘int’ to ‘char’ changes value from ‘53643’ to ‘'\377777 и "multi-character character constant [-Wmultichar] Предположительно это происходит из-за того что я пытаюсь рассматривать каждый символ считаной строки с помощью указателей. Но как иначе можно работать с символами, если мне для каждой буквы нужно создавать соответствующую переменную звука, чтобы ее добавить в транскрипцию. Вот код:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Word{
public:
string value1=" ";
string value2=" ";
int part_count=0;
int main_count=0;
int rest_parts=0;
string main_vowel=" ";
int is_vow(char y){
char liter;
string vowels_big="АЕЁИОУЫЭЮЯ";
const char *enter_vowels_big=vowels_big.c_str();
char *move_vowels_big= (char *) enter_vowels_big;
for (int i=0;i<vowels_big.size();i++){
liter=*(move_vowels_big+i);
if (*(move_vowels_big+i)==liter) return 2;}
string vowels_little="аеёиоуыэюя";
const char *enter_vowels_little=vowels_little.c_str ();
char *move_vowels_little= (char *) enter_vowels_little;
for (int i=0;i<vowels_little.size();i++){
if (*(move_vowels_little+i)==liter) return 1;}
return 0;
}
int is_bell(char y){
char liter;
string bells_big="БВГДЖЗЙКЛМНРЦ";
const char *enter_bells_big=bells_big.c_str ();
char *move_bells_big= (char *) enter_bells_big;
for (int i=0;i<bells_big.size();i++){
if (y==*(move_bells_big+i)) return 2;}
string bells_little="пстфхчшщ";
const char *enter_bells_little=bells_little.c_str ();
char *move_bells_little= (char *) enter_bells_little;
for (int i=0;i<bells_little.size();i++){
if (*(move_bells_little+i)==liter) return 1;}
return 0;
}
Word(ifstream &fin) {
fin>>value1;
value2=transcription();
}
string transcription(){
bool bef=true;
int* is_vow_value=new int[value1.size()];
int* is_bell_value=new int[value1.size()];
const char *enter_value1=value1.c_str ();
char *move_value1= (char *) enter_value1;
for (int i=0;i<value1.size();i++){
is_vow_value[i]=is_vow(*(move_value1+i));
if (is_vow_value[i]==2){
bef=false;
}
if (is_vow_value[i]==1){
if (bef==true){
if (*(move_value1+i)=='о' or *(move_value1+i)=='я') *(move_value1+i)='а';
if (*(move_value1+i)=='ю') *(move_value1+i)='у';
if (*(move_value1+i)=='и') *(move_value1+i)='ы';
if (*(move_value1+i)=='е') *(move_value1+i)='э';}
else *(move_value1+i)='@';}
if ((*(move_value1+i)=='т') and (*(move_value1+i+1)=='c')){
value2+='ц';
*(move_value1+i)='?';
i++;
}
if ((*(move_value1+i)=='д') and (*(move_value1+i+1))=='з'){
value2+='ц';
*(move_value1+i)='?';
i++;}
if (is_bell_value[i]==2){
if ((is_bell(*(move_value1+i+1))<2) and (is_bell (*(move_value1+i+1))==0)){
if (*(move_value1+i)=='б') *(move_value1+i)='п';
if (*(move_value1+i)=='в') *(move_value1+i)='ф';
if (*(move_value1+i)=='д') *(move_value1+i)='т';
if (*(move_value1+i)=='г') *(move_value1+i)='к';
if (*(move_value1+i)=='ж') *(move_value1+i)='ш';
if (*(move_value1+i)=='з') *(move_value1+i)='с';}
}
if ((is_vow_value[i]==0) and (is_bell_value[i]==0)) *(move_value1+i)='?';
value2+=*(move_value1+i);
}
return value2;}
int count_rest_parts(){
return (part_count-main_count);
}
};
int main()
{
setlocale(LC_ALL, "Russian");
string ABC="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
ifstream fin ("input.txt");
vector <Word> Words;
for (;!fin.eof();){
Words.push_back(Word(fin));}
for (int i=0;i<Words.size();i++){
cout<<Words[i].value1<<" "<<Words[i].value2<<" "<<Words[i].part_count<<" "<<Words[i].rest_parts<<" "<<Words[i].main_vowel<<endl;
}
return 0;
}
Посоветовали изменить код, вместо char использовать string для каждого рассматриваемого символа. Но это результатов не принесло, только выдает ошибку: terminate called after throwing an instance of 'std::length_error' what(): basic_string::_M_create