Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Класс RString


Автор: nikitao 25.11.2005, 21:24
Делать мне было нечего и написал класс RString,похожий на String,но автомотически конвертирующий бредятину в русский текст(причем вручную и посимвольно),согласно моей кодировки.Вот код
Код

#include<iostream>
#include<conio.h>
using namespace std;
class RString{
    char *stroka;
public:
    RString(char *line)
    {
        stroka=new char[strlen(line)+1];
        strcpy(stroka,line);
        convert(true);
    }
    ~RString()
    {
        delete [] stroka;
    }
    void convert(bool RE=true)
    {
        char *p;
        p=stroka;
        if (RE==true)
            while(*p!='\0')
            {
                if ((*p>='р')&&(*p<='я'))
                    *p-=16;
                else
                if ((*p>='А')&&(*p<='п'))
                    *p-=64;
                p++;
            }
        else
            while(*p!='\0')
            {
                if ((*p>='A'-64)&&(*p<='п'-64))
                    *p+=64;
                if ((*p>='р'-16)&&(*p<='я'-16))
                    *p+=16;
                p++;
            }
    }
    friend istream &operator>>(istream &stream,RString &ob)
    {
        char *temp;
        temp=new char[5000];
        stream>>temp;
        delete [] ob.stroka;
        ob.stroka=new char[strlen(temp)+1];
        strcpy(ob.stroka,temp);
        ob.convert();
        delete [] temp;
        return stream;
    }
    friend ostream &operator<<(ostream &stream,RString &ob)
    {
        ob.convert();
        stream<<ob.stroka;
        return stream;
    }
};
int main()
{
    RString ob("ВОБЛА");
    RString ob2("с");
    cout<<ob<<endl<<ob2;
    getch();
}

Он еще не дописан,но на этом этапе возникает ошибка,которую ну в упор не вижу:
Строку "ВОБЛА" прекрасно конвертирует,а строку "п"-нет.Почему не пойму smile
Если убрать из кода
Код

else
if ((*p>='А')&&(*p<='п'))
    *p-=64;

Но тогда другая часть перестает работать(ну это очевидно)
В чем совершил ошибку??? smile

Автор: GrayCardinal 26.11.2005, 13:24
ГЫ - ГЫ
Могу предположить что эт потому, что у Вас p - объявлен как _знаковый_ char. Скорее всего, если заменить
на
unsigned char p,
то все пройдет. smile
Хотя я могу ошибаться smile

ЗЫ
старый прикол smile smile smile

Автор: nikitao 26.11.2005, 17:33
Я тоже так думал,но все мои эксперементы с unsigned char не увенчались успехом smile (хотя я несильно пробовал)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)