非中文字符变为中文字符?用c或者c++实现都可以,大侠请把源代码贴上来啊,马上给分哈

abstruse 2004-09-02 04:14:19
有一个文本文件aaa.txt,有三列,格式如下:
姓名(char(20)) 地址(char(30)) email(char(30))
孙悟空 花果山11号(2)楼 swk@sky.bbb
猪八戒 瑶池99号9.2楼 zbj@sky.bbb

现在需要把'地址‘一栏的所有文字中的非中文字符变为中文字符,如99变为99,(变为(
上面转换后的结果如下,变换后第2列还是char(30)
孙悟空 花果山11号(2)楼 swk@sky.bbb
猪八戒 瑶池99号9。2楼 zbj@sky.bbb
...全文
133 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxhfortrue 2004-09-02
  • 打赏
  • 举报
回复
完整的C程序,输入文件aaa.txt 输出文件bbb.txt
xxhfortrue 2004-09-02
  • 打赏
  • 举报
回复
靠,这样都有人写
xxhfortrue 2004-09-02
  • 打赏
  • 举报
回复
#define MAXLEN 256
#include "stdio.h"
unsigned short entocn(unsigned char ench)
{

switch(ench)
{
case '0': return *(unsigned short *)"0";break;
case '1': return *(unsigned short *)"1";break;
case '2': return *(unsigned short *)"2";break;
case '3': return *(unsigned short *)"3";break;
case '4': return *(unsigned short *)"4";break;
case '5': return *(unsigned short *)"5";break;
case '6': return *(unsigned short *)"6";break;
case '7': return *(unsigned short *)"7";break;
case '8': return *(unsigned short *)"8";break;
case '9': return *(unsigned short *)"9";break;
case '(': return *(unsigned short *)"(";break;
case ')': return *(unsigned short *)")";break;
case '.': return *(unsigned short *)"。";break;
default:
break;
}
return 0;
}

void enstrtocnstr(char *inputstr)
{
char temp[MAXLEN];
int i=0,j=0;
while(*(inputstr+i))
{
unsigned short a;
a = entocn(*(inputstr + i));
if (a == 0)
*(temp +j) = *(inputstr +i);
else
{
*(unsigned short *)(temp +j) = a;
j++;
}
j++;
i++;
}
*(inputstr +j)=0;
if (j <=0)return;
for (;j>0;j--)
*(inputstr + j -1 ) = *(temp +j -1);
}
void getstr(char *sure,char *dest,int col)
{

int ctrl = 0,tempcol = 0,i=0,j=0;

while(*(sure + i))
{
if (*(sure + i) != ' ')
{
if (ctrl == 1)
{
tempcol ++;
ctrl = 0;
}
if (tempcol == col)
{
*(dest + j) = *(sure +i);
j++;
}
}
else
{
ctrl = 1;
}
i++;
}
*(dest +j ) = 0;


}
void main()
{
char sz[MAXLEN];
char sz1[MAXLEN];
FILE *fp,*fp1;
fp =fopen("aaa.txt","r+");
fp1 = fopen("bbb.txt","a+");
if (fp == NULL || fp1 == NULL)
return;
while (!feof(fp))
{
fgets(sz,MAXLEN,fp);
getstr(sz,sz1,0);
fputs(sz1,fp1);
fputs(" ",fp1);
getstr(sz,sz1,1);
enstrtocnstr(sz1);
fputs(sz1,fp1);
fputs(" ",fp1);
getstr(sz,sz1,2);
fputs(sz1,fp1);
}
fclose(fp);
fclose(fp1);

}
wound979 2004-09-02
  • 打赏
  • 举报
回复
好象是字符一和数字1差30(或31)记不清楚了,自己试试
lixiaosan 2004-09-02
  • 打赏
  • 举报
回复
思路就是 he_zhidan(何志丹:www.vcshare.net) 的了。。

你读文件的时候最好用CStdioFile来一行一行读,然后解析行,只替换第二列的数据就行了
Mr-Chen 2004-09-02
  • 打赏
  • 举报
回复
作个二位字符数组
一边方半角,另一边放全角
转换时只需比较替换就行了
  • 打赏
  • 举报
回复
map["1"] = "1"; 左边是英文的1,右边是中文的1
"debug\\test.txt"文件的内容是英文

结果放在debug\\test1.txt中
  • 打赏
  • 举报
回复
#include "afxtempl.h"
CString ChangEnglishToChinese(CString str)
{
CString strRet;
strRet.Empty();

CMapStringToString map;
map["0"] = "0";
map["1"] = "1";
map["2"] = "2";
map["3"] = "3";
map["4"] = "4";
map["5"] = "5";
map["6"] = "6";
map["7"] = "7";
map["8"] = "8";
map["9"] = "9";
map["."] = "。";
for(int i = 0 ; i < str.GetLength(); i++)
{
CString strTemp(str[i]);
CString value;
if(map.Lookup(strTemp,value))
{
strRet += value;
}
else
strRet += strTemp;
}

return strRet;
}
void CDlg17Dlg::OnButton1()
{
CFile file;
file.Open("debug\\test.txt",CFile::modeReadWrite);
int nLength = file.GetLength();
char * pszStr = new char[nLength +1 ];
memset(pszStr,0,nLength+1);
file.Read(pszStr,nLength);
CString str = ChangEnglishToChinese(pszStr);
file.Close();
file.Open("debug\\test1.txt",CFile::modeCreate|CFile::modeWrite);
file.Write(str,str.GetLength()+1);
file.Close();
delete [] pszStr;
}
abstruse 2004-09-02
  • 打赏
  • 举报
回复
重新说明:
1:只修改地址列,其他两列不能修改,
2:不要和数据库混到一起,与数据库无关
3:希望是个完整的.c文件,编译后就可用
孙悟空1 花果山11号(2)楼 swk@sky.bbb
猪八戒 瑶池99号9。2楼 zbj@sky.bbb
其中孙悟空1不能变为孙悟空1
xxhfortrue 2004-09-02
  • 打赏
  • 举报
回复
把字符串中一个字符一个字符地取出来判断是不是半角字符,是就转为全角entocn()
xxhfortrue 2004-09-02
  • 打赏
  • 举报
回复
unsigned short entocn(unsigned char ench)
{
unsigned short cnch;

switch(ench)
{
case '0': return *(unsigned short *)"0";break;
case '1': return *(unsigned short *)"1";break;
....
}

}
名牌大灰狼 2004-09-02
  • 打赏
  • 举报
回复
没太明白楼主的意思,你可以CFile类读到CString中去.
itoa 或是format("%d",99);
这样的格式还是数据库方便
microyzy 2004-09-02
  • 打赏
  • 举报
回复
那就搜索字符串,把'0','1'...分别变成'0','1'...

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧