下面的程序可以完成要求,并没有考虑运行效率优化!
#include
int main()
{
FILE *fin ,*fout;
int j, beg_space = 1; /* 设定空格开始 */
char gc, gc2;
char str[80];
if((fin=fopen("text.txt","r"))==NULL)
{
printf("cannot open file\n");
return 1;
}
if((fout=fopen("output.txt","w"))==NULL)
{
printf("cannot open file\n");
return 2;
}
while((gc=fgetc(fin))!=EOF)
{
if(gc == ' ')
{
if(beg_space) continue;
else
{
fputc(gc, fout);
beg_space = 1;
}
}
else
{
beg_space = 0;
fputc(gc,fout);
/* 检查china */
j = 1;
if(gc == 'c')
{
str[0] = 'c';
while(1)
{
str[j] = fgetc(fin);
if(str[j] == ' ')
{
str[j] = '\0';
break;
}
++j;
}
if(j != 5) /* 5是china的长度 */
{
fputs(str, fout);
}
else
{
/* 短路算法:首先比较最后一个字符,相等后再比较其它 */
if((str[4] == 'a') && (str[1] == 'h') && (str[2] == 'i') && (str[3] == 'n'))
{
fputs("chhiinnaa", fout);
}
else
{
/* 对应c打头的字符已经输入了,故移动指针到下一个字符 */
fputs(str+1, fout);
}
}
fputc(' ', fout);
beg_space = 1;
}
}
}
fclose(fin);
fclose(fout);
return 0;
}
1、先trim一下去掉前后的空格,然后将--替换为-,循环直到找不到--。
2、china逐字读出来然后再double的写进去咯。或者把a替换成aa这样的,但是不能递归。
代码自己写吧,自己写印象深刻,呵呵。
1.如果用的是托管C可这样做
String^ 源=...
String^ 结果;
array
{' '},
System::StringSplitOptions::RemoveEmptyEntries);
for each(String^ SU in S)结果+=SU+" ";
2.int I;
array
array
for(I=0;I<结果->Length;I++)结果[I]=源[I/2];
1.用split函数隔开,依次放到队列里面
2.把队列里面的数据重新用“-”这个组合起来