问题:
在一个文件里面写入“我有1支铅笔,但是仓库里面有353628支”,读出刚才的文件内容,将1变为一,以此类推,写入新的文件。新文件内容应为“我有一支铅笔,但是仓库里面有三五三六二八支”
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
char *s[10]={"零","一","二","三","四","五","六","七","八","九"};
char str[]={"我有1支铅笔,但是仓库里面有353628支"};
printf(str);
int n=0;
printf("\n\n");
for(int i=0;i<strlen(str);i++){
if(((int)str[i])<0){ //汉字编码小于0,本编译器一个汉字占用2个字节
i+=2;
}
else{
n+=1; //统计出现的非汉字数,为下面的开辟字符串数组做准备
}
}
char* newstr=(char*)malloc(strlen(str)+n*2);
int j=0;
for(int i=0;i<strlen(str);i++){
if((((int)str[i])<0)){
newstr[j]=str[i];
newstr[j+1]=str[i+1];
//newstr[j+2]=str[i+2];
i+=1; //i本身有i++
j+=2; //j直接自增两位
}
else{
for(int k=0;k<2;k++){
newstr[j]=s[str[i]-'0'][k];
j+=1;
}
}
newstr[j]='\0';//不加\0会出现字符异常,因为c中的string.h必须用\0判断结尾
}
puts(newstr);
FILE *fp;
if((fp=fopen("D:\\test.txt","w+"))==NULL)
{
printf("file open error");
exit(0);
}
fputs(newstr,fp);
return 0;
}
运行结果如图:
标签:数字,变换,汉字,char,int,str,printf,include,newstr From: https://blog.51cto.com/u_15840342/5783651