C语言 拼音转汉字
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <windows.h> #define N 100 void del_char(char a[],char c)//删除字符串中的小写字母 { int i,j; for(i=0,j=0; *(a+i)!='\0'; i++) { if(*(a+i)>='a'&& *(a+i)<='z') continue; else { *(a+j)=*(a+i); j++; } } *(a+j)='\0'; } void del_char1(char a[],char c)//删除字符串中的除小写字母 和空格外的所有字符 { int i,j; for(i=0,j=0; *(a+i)!='\0'; i++) { if(*(a+i)>='a'&& *(a+i)<='z'|| *(a+i)==' ') { *(a+j)=*(a+i); j++; } else { continue; } } *(a+j)='\0'; } int cishu(char *a,char *b) { int n=0; while(*a) { if(*a==*b) n++; a++; } return n; } char * retpinyin() { static char name[10]; srand((unsigned)time(NULL)); int iRange1 = 0xf7 - 0xb0; int iRange2 = 0xfe - 0xa1; char iCode1 = rand()%iRange1 + 0xb0; char iCode2 = rand()%iRange2 + 0xa1; char chh[3] = {iCode1,iCode2,0}; strcpy(name,chh); return name; } int StrReplace(char strRes[],char from[], char to[]) { int i,flag = 0; char *p,*q,*ts; for(i = 0; strRes[i]; ++i) { if(strRes[i] == from[0]) { p = strRes + i; q = from; while(*q && (*p++ == *q++)); if(*q == '\0') { ts = (char *)malloc(strlen(strRes) + 1); strcpy(ts,p); strRes[i] = '\0'; strcat(strRes,to); strcat(strRes,ts); free(ts); flag = 1; } break;//只替换从左到右第一个目标字符串;如果想替换所有目标则去掉该行 } } return flag; } int main() { int zongshu=0,zhengque=0,cuo=0; int zheng=0,bz=0; int a=0; FILE *fp; char str[N + 1],ch[2],ch1[20],ch2[20],chx[10],str1[N+1],str3[N+1]; char * chh; char *p; //判断文件是否打开失败 if ( (fp = fopen("duizhao1.txt", "rt")) == NULL ) {//确认正确打开了对照表,否则报错 puts("Fail to open file!"); exit(0); } while(1) { char str2[N+1]={0};//字符数组每循环一次赋一次初值 char str3[N+1]={0};//字符数组每循环一次赋一次初值 scanf("%s",&chx);//输入要检查的拼音 if(strcmp(chx,"1")==0)//结束标志 break; while( fgets(str, N, fp) != NULL ) //指针从头到尾依次变化 { bz=0; //printf("%s\n",str); if(strstr(str,chx)!=0)//检索对照表中每一行是否包含chx(输入的拼音) { strcpy(str1,str);//数组复制,str复制给str1 strcpy(str3,str); StrReplace(str1,"\n","");//将换行符替换 StrReplace(str1," ",""); //printf("%s\n",str1); if(cishu(str1," ")>=1) { del_char1(str1,' '); p = strtok(str1, " "); while(p) { if(strcmp(p,chx)==0) { bz++; } //printf("....kkk%s\n", p); p = strtok(NULL, " "); } if(bz>=1) { strcpy(str1,str); StrReplace(str1,"\n","");//将换行符替换 StrReplace(str1," ",""); del_char(str1,' '); strcat(str2, str1);//数组的连接,完成类似功能:str2=str2+str1 } } else { StrReplace(str3,"\n","");//将换行符替换 StrReplace(str3," ",""); del_char1(str3,' '); if(strcmp(str3,chx)==0) { strcpy(str3,str); StrReplace(str3,"\n","");//将换行符替换 StrReplace(str3," ",""); del_char(str3,' '); strcat(str2, str3); } } } } printf("%s\n",str2); //输出最后结果 rewind(fp); // fp回到开始位置 zongshu++; } fclose(fp);//关闭指针 return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了