Ошибки "multi-character character constant [-Wmultichar] и "overflow in conversion from ‘int’ to ‘char’ changes value from ‘53643’ to ‘'\377777"

Рейтинг: 0Ответов: 0Опубликовано: 08.08.2023

Мой код должен выводить выводить транскрипции слов во входном файле. Но вместо этого выдает предупреждения типа: "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

Ответы

Ответов пока нет.