㈠ 我想弄一个类似摩斯电码的用数字能够代表汉字的密码,该怎么办
汉字--拼音--按规律打乱拼音--用手机键盘将拼音转换成数字(例: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]!='