㈠ 我想弄一個類似摩斯電碼的用數字能夠代表漢字的密碼,該怎麼辦
漢字--拼音--按規律打亂拼音--用手機鍵盤將拼音轉換成數字(例:A=21,B=22,C=23,D=31),然後根據摩斯密碼表將得到的數字變成摩斯密碼,完工。難點就在於變成摩斯密碼前如何加密。你可以網路一下柵欄密碼什麼的,還有平民常用的五筆加密什麼的。望採納
㈡ 請教個問題,一串數字怎麼轉成漢字呢 比如說 漢字一 對應 19968 C++中怎麼將19968轉成漢字」 一 「呢
// changeDate.cpp : 定義控制台應用程序的入口點。
//
#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;
int check(string sNum);
void changeData (string sNum);
void changeNum(char cNum);
void change(int iNum);
int checkZero(const char * pTmp);
int _tmain(int argc, _TCHAR* argv[])
{
int rc;
string sNum;
do
{
cout<<"please input a number"<<endl;
cin>>sNum;
rc = check(sNum);
if(rc == 0)
{
break;
}
if (sNum.length() >=15)
{
cout<<"number to long"<<endl;
break;
}
}while(1);
changeData(sNum);
system("pause");
return 0;
}
int check(string sNum) /*檢查是否為合法的數字串*/
{
const char *pTmp = sNum.c_str();
int iNum=0;
for(int i=0; i != sNum.length(); i++)
{
if( !isdigit(*(pTmp+i)))
{
if (*(pTmp+i) != '.')
{
cout<<"Input isn't a number!"<<endl;
return -1;
}
else
{
iNum++;
}
}
}
if (iNum >= 2)
{
cout<<"Iput number wrong!"<<endl;
return -1;
}
else
{
return 0;
}
}
int chechPoint(string sNum) /*查找小數點的位置*/
{
const char *pTmp = sNum.c_str();
for(int i=0; i != sNum.length(); i++)
{
if (*(pTmp+i) == '.')
{
return i;
}
}
return 0;
}
void changeData (string sNum) /*將數字串用中文描述出來*/
{
if (sNum.length() <= 0)
{
return;
}
int i;
char cTmp;
int iTmp;
int iRet;
int iZero=0;
int iHead=0;
int iPoint=0;
int iHeadLen=0;
const char * pTmp = sNum.c_str();
iPoint = chechPoint(sNum);/*檢查是否有小數位*/
if (iPoint > 0 && iPoint < sNum.length() -1 )
{
iHeadLen = iPoint;
}
else
{
/*整數部分只一個數字的情況*/
if ( sNum.length() == 1)
{
changeNum(*pTmp);
cout<<endl;
return;
}
iHeadLen = sNum.length()-1;
}
/*整數部分轉換*/
for (i = 0; i != iHeadLen; i++)
{
/*頭字元為0的情況*/
if (*pTmp == '0' && iHead == 0)
{
/*整數部分只有一個的情況*/
if (iHeadLen == 1)
{
changeNum(*pTmp);
}
iHead++;
continue;
}
if (*(pTmp+i) == '0')
{
iRet = checkZero(pTmp+i);
if(iRet > 0)
{
int j;
for (j = 0; j <= iRet; j++)
{
iTmp = iHeadLen-i-j;
if (iTmp == 5|| iTmp == 9 || iTmp == 12)
{
change(iHeadLen-i-j);
}
}
i +=iRet;
iZero++;
continue;
}
else
{
iTmp = iHeadLen-i;
if (iTmp == 5|| iTmp == 9 || iTmp == 12)
{
change(iHeadLen-i);
}
else
{
if (iTmp == 1)
{
break;
}
changeNum(*(pTmp+i));
}
}
}
else
{
if (iZero > 0)
{
changeNum('0');
iZero=0;
}
changeNum(*(pTmp+i));
change(iHeadLen-i);
}
}
/*小數部分轉換*/
if (iPoint > 0 && iPoint < sNum.length()-1 )
{
cout<<"點";
int k;
for (k = iPoint+1; k != sNum.length(); k++)
{
changeNum(*(pTmp+k));
}
}
cout<<endl;
}
void changeNum(char cNum)
{
switch(cNum)
{
case '0': cout<<"零";break;
case '1': cout<<"一";break;
case '2': cout<<"二";break;
case '3': cout<<"三";break;
case '4': cout<<"四";break;
case '5': cout<<"五";break;
case '6': cout<<"六";break;
case '7': cout<<"七";break;
case '8': cout<<"八";break;
case '9': cout<<"九";break;
}
}
/*單位轉換*/
void change(int iNum)
{
switch(iNum)
{
case 1: break;
case 2: cout<<"十";break;
case 3: cout<<"百";break;
case 4: cout<<"千";break;
case 5: cout<<"萬";break;
case 6: cout<<"十";break;
case 7: cout<<"百";break;
case 8: cout<<"千";break;
case 9: cout<<"億";break;
case 10: cout<<"十";break;
case 11: cout<<"千";break;
case 12: cout<<"萬";break;
case 13: cout<<"十";break;
case 14: cout<<"百";break;
case 15: cout<<"千";break;
}
}
/* 檢查首個字元為0是否有幾個連續的0,返回連接0的個數 */
int checkZero(const char * pTmp)
{
const char *p = pTmp;
int i;
int iRet = 0;
for(i = 1; i != strlen(p); i++)
{
if (*(p+i) == '0')
{
iRet++;
}
else
{
break;
}
}
return iRet;
}
編譯通過,可以直接運行,還可以支持小數.
㈢ 用C語言把一串數字字元串變成中文數字
#include<stdio.h>
voidprint_chinese(charc)
{
switch(c)
{
case'0':printf("零");break;
case'1':printf("一");break;
case'2':printf("二");break;
case'3':printf("三");break;
case'4':printf("四");break;
case'5':printf("五");break;
case'6':printf("六");break;
case'7':printf("七");break;
case'8':printf("八");break;
case'9':printf("久");break;
default:printf("??");break;
}
}
intmain()
{
charstr[1000];
scanf("%s",str);
for(inti=0;str[i]!='