【题目】
在TeX中,左引号是“``”,右引号是“''"。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式。
样例输入:
"To be or not to be," quoth the Bard, "that
is the question".
样例输出:
``To be or not to be,'' quoth the Bard,``that
is the question''.
【分析】
1.得到要转换的字符串;
2.判断字符串中的标点:左引号输出“``”,右引号输出“''”(因为TxT两种格式不一样,而英文的是需要判断的)。
3.按规定要求输出字符串。
#include<stdio.h>
#include<string.h>
int main()
{
char s[20];
int q=1;
scanf("%s",s);
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='"')
{
printf("%s",q?"``":"''");
q=!q;
}
else
putchar(s[i]);
}
return 0;
}
运行结果,我们发现并不是题目要求的样子。
因为,scanf("%s",s)语句不能读入 SPACE、TAB这样的字符,即获得的s中是没有"\t"、"\n"的。
幸好还有其他解决方式。我们可以用getchar()依次获取字符,直到EOF。getchar函数获取输入内容后转为int型,为什么不是char呢?其实正是这个特点getchar才可以将"\t"等字符翻译准确,EOF不是一个字符,这样文件的末尾和转义字符就区分开了。
#include<stdio.h>
#include<string.h>
int main()
{
int c,q=1;//将c定义成int型,q作为区分前引号和后引号的标志
while((c=getchar())!=EOF)//读取的不是文件末尾,输出字符
{
if(c=='"')
{
printf("%s",q?"``":"''");
q=!q;
}
else
putchar(c);
}
return 0;
}
其他几种获取字符串的方式:
fgetc(fin):从一个文件中依次获取单个字符,包括各种转义字符“\n”,“\t”等。将所要转换的语句放入"TxT.txt"文件中:
#include<stdio.h>
#include<string.h>
int main()
{
int c,q=1;
FILE *fin=fopen("TxT.txt","r");
while((c=fgetc(fin))!=EOF)
{
if(c=='"')
{
printf("%s",q?"``":"''");
q=!q;
}
else
putchar(c);
}
return 0;
}
输出结果:
``To be or not to be'', he said, ``that
is a question.''
gets():用于获取一个字符串。参数为所要填充的字符串。这个函数同样也能获取空格,但它本身有一个问题:允许程序读写字符串的非法内存,这就造成了数据丢失的安全隐患,可能会出现你不想发生的事情。C11标准里,gets()函数已经被删除。
<conio.h>:这个头文件中有许多非标准的读写函数,而且调用也有一些编译器需求,不常使用。
如有错误,恳请指出。谢谢^-^