非中文字符变为中文字符?用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
...全文
157 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'...
内容概要:本文围绕“价格型需求响应”展开,重点研究基于Logistic函数的负荷转移率模型在需求响应中的应用,并提供了完整的Matlab代码实现。通过构建数学模型,精确量化电价变动对电力负荷转移行为的影响,旨在优化电力系统供需平衡,提升电网运行效率与经济性。研究系统阐述了模型的理论基础、关键参数设定、仿真流程设计及结果分析方法,适用于电力市场环境下用户侧响应行为的建模与优化,为需求响应策略的制定提供科学依据和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的科研人员、高校研究生及从事能源管理、智能电网、电力市场等相关工作的技术人员。; 使用场景及目标:①应用于电力需求侧管理研究,模拟和预测不同电价政策下用户的负荷响应特性;②为电力市场机制设计、峰谷分时电价制定及电网调度优化提供模型支持与仿真工具;③作为教学案例帮助学生深入理解需求响应建模原理、非线性函数拟合方法及数值仿真技术。; 阅读建议:建议读者结合Matlab代码逐段理解模型实现细节,重点关注Logistic函数在刻画负荷转移率非线性特征方面的优势,并可根据实际研究需求调整模型参数,进行扩展性实验与验证。

16,550

社区成员

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

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

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