求高手做个小小程序 要求将记事本中的英文标识(一样的)替换为相对应的中文,例子如补充

来自:络知识    更新日期:早些时候
英标单元音 双元音 每个音标找2个单词例子 标明汉语(要求单词简单)~

/i:/: me see we he
/i/:it bit fit big pig
/e/:get debt yet wet neck
/æ/:cap map
/a:/arm art cart hard fast
/o/:top shop what hot
/o:/saw law
/u/put foot cook book took
/u:/too do who you
(短音a ) uo cuo bud rough
(长音 e) fur sir her shirt hurt
(短音e)ago again among above agree

金山词霸是在国内电子词典中安装使用率很高的软件,当安装了金山词霸后,在系统的Fonts目录下便会有Ksphonet.ttf这样一个文件,这就是金山公司开发的国际音标字体,该字库仅有24KB。由于金山词霸的使用面非常广,所以用户会很容易找到这一音标字体。

1、利用Word自身提供的插入符号功能来实现

进入Word 2000,选择菜单栏中的“插入→符号”命令,弹出“符号”对话框,单击“符号”标签,从字体下拉列表框中选择“IpaPanADD”字体,如图1所示。选择需要插入的音标符号,按[插入]按钮就可以了。您也可以按[快捷键]按钮为要插入的符号设置快捷键,以便以后用键盘快速输入。


图1

2、利用Windows提供的字符映射表来实现

单击“开始→程序→附件→系统工具→字符映射表”命令(如果您的系统上没有此程序,请运行“添加/删除程序”来安装,具体可参见Windows使用手册),打开“字符映射表”程序,并从字体下拉框中选择“IpaPanADD”字体,其中的字符就会显示出来,选中自己需要的音标符号,再点击[复制]按钮将它复制到Windows剪贴板中(如图2),然后到Word中按下[粘贴]按钮即可将此音标符号插入。利用字符映射表,不仅可以在Word中输入国际音标,还可以在其他字处理软件如:写字板、记事本、WPS中输入音标。


图2



http://bbs.61.fm/t/1-303841.htm

/*
实现原理:
首先是数据结构:由于只是以":"来分割, 所以采用键值对的模式
然后利用键值对获取原始文件中的数据, 在内存中比对参考键值对队列并进行修改文件中获取的键值对链表
将更新好的数据刷新到另一个文件中去

注意这个程序给出了文件替换的方法, 但是里面很多细节没有过多的处理
比如在文件末尾如果有换行符的情况没有给予考虑

内部也是只测试了小块的文件,对于大文件的适用性不知道会怎么样
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MYMAXLENGTH 20
#define SYM ':'
#define FILENAME "File.txt"
#define SECFILENAME "FileIn.txt"

typedef struct _Dict
{
char key[MYMAXLENGTH];
char value[MYMAXLENGTH];
struct _Dict * pNext;
}Dict, * pDict;

pDict InitKeyValueDict(int * num);
bool InitFileWithData(char * strFile);
bool GetDictFromFile(char * strFile, pDict pdictlnk);
bool GetKeyValueByDict(char * strdict, char symbol, pDict dict);
void ModifyFileDict(pDict fileDict, pDict dictArr, int num);
bool PutDictLnkToFile(char * strFile, pDict pdictlnk);
void ModifyMode(char * orifile, char * file);
void MemFreeBlock(pDict dictBlock);
void MemFreeLnk(pDict dictLnk);

int main(void)
{
if(!InitFileWithData(FILENAME))
{
printf("文件初始化失败!\n");
exit(-1);
}

pDict dictLnk = (pDict)malloc(sizeof(Dict));
dictLnk->pNext = NULL;

if (!GetDictFromFile(FILENAME, dictLnk))
{
printf("文件内容拷贝错误!\n");
exit(-1);
}

int num=0; // 记录比对字典中值的个数
pDict dictArr = InitKeyValueDict(&num);

ModifyFileDict(dictLnk, dictArr, num);

PutDictLnkToFile(SECFILENAME, dictLnk);

ModifyMode(FILENAME, SECFILENAME);

MemFreeBlock(dictArr);
MemFreeLnk(dictLnk);

return 0;
}

pDict InitKeyValueDict(int * num)
{// 初始化比对的数据字典
pDict dictArr = (pDict)malloc(sizeof(Dict)*4);
char tmp[20] = {'\0'};
for (int i=0; i<4; i++)
{
strcpy(dictArr[i].key, tmp);
strcpy(dictArr[i].value, tmp);
}
strcpy(dictArr[0].key, "主题");
strcpy(dictArr[0].value, "儿童节");
strcpy(dictArr[1].key, "作者");
strcpy(dictArr[1].value, "栗子");
strcpy(dictArr[2].key, "版本");
strcpy(dictArr[2].value, "1.0");
strcpy(dictArr[3].key, "分辨率");
strcpy(dictArr[3].value, "WVGA");
*num = 4;

return dictArr;
}

bool InitFileWithData(char * strFile)
{// 初始化原始文件中的内容
bool flg = true;
FILE * fp;
fp = fopen(strFile, "w+");
if (fp == NULL)
{
printf("Failed to open file: %s!\n", strFile);
exit(-1);
}
fprintf(fp, "themename:儿童节\n");
fprintf(fp, "author:栗子\n");
fprintf(fp, "version:1.0\n");
fprintf(fp, "screen:WVGA"); // 这个地方不要再添加换行

fclose(fp);

return flg;
}

bool GetDictFromFile(char * strFile, pDict pdictlnk)
{// 从文件中获取数据
bool flg = true;
FILE * fp;
fp = fopen(strFile, "r+");
if (NULL == fp)
{
printf("Failed to open file: %s\n", strFile);
return false;
}

char tmp[MYMAXLENGTH];
while (!feof(fp))
{
pDict dictnode = (pDict)malloc(sizeof(Dict));
dictnode->pNext = NULL;
fgets(tmp, MYMAXLENGTH, fp);
GetKeyValueByDict(tmp, SYM, dictnode);
pdictlnk->pNext = dictnode;
pdictlnk = pdictlnk->pNext;
}
pdictlnk->pNext = NULL; // 这个一定不要漏掉

fclose(fp);

return flg;
}

bool GetKeyValueByDict(char * strdict, char symbol, pDict dict)
{// 从合法字符串中构造一个键值对
bool flg = true;
int i=0;
while (*strdict!=symbol && *strdict!='\0' && *strdict!='\n') // 注意换行也不要
{
dict->key[i] = *strdict;
strdict++;
i++;
}
dict->key[i] = '\0'; // 这个很重要, 否则待会在外部进行比较的时候会出错
if (*strdict == '\0')
{
flg = false;
}
else
{
strdict++; i=0;
while (*strdict!='\0' && *strdict!='\n')
{
dict->value[i]=*strdict;
strdict++;
i++;
}
dict->value[i] = '\0';
}

return flg;
}

void ModifyFileDict(pDict fileDict, pDict dictArr, int num)
{// 修改存储在内存中的键值对链表的值
// char tmp[20] = {'\0'};
while ((fileDict=fileDict->pNext) != NULL)
{
for (int i=0; i<num; i++)
{
if (strcmp(dictArr[i].value, fileDict->value) == 0)
{
printf("hah\n");
// strcpy(fileDict->key, tmp);
strcpy(fileDict->key, dictArr[i].key);
break;
}
}
}

return ;
}

bool PutDictLnkToFile(char * strFile, pDict pdictlnk)
{// 将键值对链表保存到指定文件中
bool flg = true;
FILE * fp;
fp = fopen(strFile, "w+");
if (!fp)
{
printf("Failed to open file: %s\n", strFile);
return false;
}

while (pdictlnk=pdictlnk->pNext)
{
fprintf(fp, "%s:%s\n", pdictlnk->key, pdictlnk->value);
}

fclose(fp);

return flg;
}

void ModifyMode(char * orifile, char * file)
{// 是否使用修改模式来, 其实质就是先删除原始文件, 再修改附加文件名称
char flg;
printf("如果覆盖原始数据, 请选择 Y\n");
scanf("%c", &flg);
if (tolower(flg) == 'y')
{
unlink(orifile);
rename(file, orifile);
}

return ;
}

void MemFreeBlock(pDict dictBlock)
{// 释放连续堆内存
free(dictBlock);
dictBlock = NULL;

return;
}

void MemFreeLnk(pDict dictLnk)
{// 释放链表
pDict tmp = dictLnk;
while (dictLnk=dictLnk->pNext)
{
free(tmp);
tmp = dictLnk;
}
free(tmp);
tmp = NULL;

return ;
}

/*
这个是我自己尝试去写的一个关于你这个问题的程序, 用你上面给出的测试数据来测试还是可以的, 你自己也运行试试, 如果有什么不好的地方一起修改下 ~_~

*/

直接搜索替换不就是了,干嘛要什么程序啊。
按键精灵可以实现,不过好像没必要啊。

我有一个vbs脚本实现的文本内容替换,百度找的,发给你吧

可以联系,看昵称

好像运行出错。。。
那我直接把工程打包发你邮箱里面吧
然后你执行下看看
如果再有问题就把错误提示告知下, 因为我这边是正确的
而且直接复制粘贴回答的


求高手做个小小程序 要求将记事本中的英文标识(一样的)替换为相对应的中文,例子如补充视频

相关评论:

相关主题精彩

版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

Copyright © 喜物网