Thử với tiếng việt trong C++

82 views
Skip to first unread message

Nông Ngọc Hoai

unread,
Apr 20, 2013, 5:34:45 AM4/20/13
to b2tind4...@googlegroups.com
Tận dụng các kí tự giống tiếng việt trong bộ mã ASCII có thể mã hóa một số kí tự thành giống tiếng việt như: as=á, ef=è,...bằng cách duyệt 2 kí tự cuối xâu nếu đúng các tổ hợp cần mã hóa thì thay 2 kí tự đó bằng kí tự đúng.

Trong này có 2 chương trình con là string TiengViet(string str); và GoTiengViet(string str, short x, short y);
Trong đó :
+ TiengViet(string str); có nhiệm vụ chuyển xâu str thành giống với tiếng việt 
vd: cout<<TiengViet("xin chafo"); -> xin chào

GoTiengViet(string str, short x, short y); có chức năng nhập tiếng việt cho xâu str (con trỏ nhập bắt đầu từ tọa độ (x,y))
vd: GoTiengViet(string str, short 0, short 0);  -> nhâpj tiếng việt cho xâu str con trỏ nhấp nháy bắt đầu từ tọa độ (0,0)

Mã nguồn:


#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>


using namespace std;
string str="";


void GotoXY(int x, int y){
    COORD co
= {x,y};
   
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE) , co);
}


void TGoto(short x, short y, string str){
   
GotoXY(x,y); cout<<str;
}


int Lcase(short c){
   
if ((c<=91) && (c>=65)) return (c+32);
   
if ((c<=123) && (c>=97))return c;
}


string TiengViet(string str){
   
short l,i;
   
int tmp;
    l
=str.length();


   
for (i=0; i<=l; i++){
        tmp
=str[i]+str[i+1];//Xet 2 ki tu lien nhau


       
switch (tmp){
           
case 97 +97 : if(str[i]=='a'){str[i]=131; str.erase(i+1,1);} break;//aa
           
case 101+101: if(str[i]=='e'){str[i]=136; str.erase(i+1,1);} break;//ee
           
case 111+111: if(str[i]=='o'){str[i]=147; str.erase(i+1,1);} break;//oo
           
case 111+119: if(str[i]=='u'){str[i]=117; str.erase(i+1,1);} break;//ow
           
case 111+106: if(str[i]=='o'){str[i]=111; str.erase(i+1,1);} break;//oj
           
//f
           
case 97 +102: if(str[i]=='a'){str[i]=133; str.erase(i+1,1);} break;//af
           
case 101+102: if(str[i]=='e'){str[i]=138; str.erase(i+1,1);} break;//ef
           
case 117+102: if(str[i]=='u'){str[i]=151; str.erase(i+1,1);} break;//uf
           
case 105+102: if(str[i]=='i'){str[i]=141; str.erase(i+1,1);} break;//if
           
case 111+102: if(str[i]=='o'){str[i]=149; str.erase(i+1,1);} break;//of
           
//s
           
case 97 +115: if(str[i]=='a'){str[i]=160; str.erase(i+1,1);} break;//as
           
case 101+115: if(str[i]=='e'){str[i]=130; str.erase(i+1,1);} break;//es
           
case 105+115: if(str[i]=='i'){str[i]=161; str.erase(i+1,1);} break;//is
           
case 111+115: if(str[i]=='o'){str[i]=162; str.erase(i+1,1);} break;//os
           
case 117+115: if(str[i]=='u'){str[i]=163; str.erase(i+1,1);} break;//us
       
}


       
switch (tmp){//Tranh viec trung lap o Switch tren
           
//w
           
case 100+100: if(str[i]=='d'){str[i]=100; str.erase(i+1,1);} break;//dd
           
case 97 +119: if(str[i]=='a'){str[i]=97 ; str.erase(i+1,1);} break;//aw
           
case 111+119: if(str[i]=='o'){str[i]=111; str.erase(i+1,1);} break;//ow
           
case 117+119: if(str[i]=='u'){str[i]=117; str.erase(i+1,1);} break;//uw
           
//j
           
case 97 +106: if(str[i]=='a'){str[i]=97 ; str.erase(i+1,1);} break;//aj
           
case 105+106: if(str[i]=='i'){str[i]=105; str.erase(i+1,1);} break;//ej
           
case 101+106: if(str[i]=='e'){str[i]=101; str.erase(i+1,1);} break;//ej
           
case 117+106: if(str[i]=='u'){str[i]=117; str.erase(i+1,1);} break;//uj
           
//x
           
case 97 +120: if(str[i]=='a'){str[i]=97 ; str.erase(i+1,1);} break;//ax
           
case 101+120: if(str[i]=='e'){str[i]=101; str.erase(i+1,1);} break;//ex
           
case 105+120: if(str[i]=='i'){str[i]=105; str.erase(i+1,1);} break;//ex
           
case 111+120: if(str[i]=='o'){str[i]=111; str.erase(i+1,1);} break;//ox
           
case 117+120: if(str[i]=='u'){str[i]=117; str.erase(i+1,1);} break;//ux
       
}
   
}
   
return str;
}




void Tips(){
   
TGoto(0,0,"GoTiengViet tren C++ (Kieu Telex & bang ma ASCII)");
   
TGoto(1,1,TiengViet("          - Casc kis tu hoo tro: aa, oo, ee, as, es us, is, af, ef, uf, if"));
   
TGoto(1,2,TiengViet("          - aan Enter dee keet thusc"));
   
TGoto(1,3,TiengViet("          - Khoong vieet duoc chu hoa"));
}


string GoTiengViet(string str, short x, short y){
   
char tmp;
   
short i,l=0;
   
do{
        tmp
=getch();
        tmp
=Lcase(tmp); //Chuyen thanh chu thuong
       
//lam dep
       
GotoXY(0,2); cout<<"        "; GotoXY(0,2); cout<<l+1<<"/"<<"255";
       
GotoXY(x,y);


       
for (i=0; i<=l-1; i++)
           
TGoto(i+x,y," "); //Xoa viet lai tu dau


       
if ((int)tmp==8) {//BackSpace
           
if (l==0) GoTiengViet(str,x,y);//Tranh Loi Khi chua go ma an backspace


            str
.erase(l-1,1);
            str
=TiengViet(str);
           
TGoto(x,y,str);
            l
=str.length();
         
}
       
else{
            str
=str+tmp;
            str
=TiengViet(str);
           
TGoto(x,y,str);
            l
=str.length();
       
}


       
if (l>254) tmp=13;


   
}while(tmp!=13);
   
return str;
}


main
(){
   
Tips();
    cout
<<endl<<TiengViet("Xin Chafo")<<endl<<endl;


    str
=GoTiengViet(str, 0, 6);
    cout
<<"";


   
/*
    //Hien Thi Cac Ki Tu Trong Bang Ma ASCII
    for (short i=1; i<=255; i++)
        cout<<i<<"-"<<(char)i<<endl;
    getch();
    */

}


vẫn hơi tù nhưng chác chấp nhận đc

TiengViet.rar

Cường Hoàng

unread,
Apr 20, 2013, 6:17:51 AM4/20/13
to b2tind4...@googlegroups.com

Ko hiểu
Vào 20-04-2013 16:34, "Nông Ngọc Hoai" <ngoch...@gmail.com> đã viết:

> ...

Hoài Nông

unread,
Apr 20, 2013, 6:30:29 AM4/20/13
to b2tind4...@googlegroups.com

Hì, ta sẽ đọc kí tự nhập vào, nếu đúng là kí tự cần mã hóa thì mã hóa nó

From Nông Ngọc Hoài

Vào 20-04-2013 17:17, "Cường Hoàng" <cuon...@gmail.com> đã viết:
--
[*---------------Tùy chọn----------------*]
---
Bạn nhận được thư này vì bạn đã được đăng ký vào nhóm Google Groups "Lớp B2 Tin khóa D44 Học viện an ninh nhân dân".
Để hủy đăng ký nhóm này và ngừng nhận email từ nhóm, hãy gửi email tới b2tind44hvann...@googlegroups.com.
Để đăng bài lên nhóm này, hãy gửi email đến b2tind4...@googlegroups.com.
Truy cập nhóm này tại http://groups.google.com/group/b2tind44hvannd?hl=vi.
Để có thêm tùy chọn, hãy truy cập https://groups.google.com/groups/opt_out.
 
 
Reply all
Reply to author
Forward
0 new messages