a[j]=a[j+1];/*从第一个空格开始,后续所有字符前提一位,即去除第一个空格。
*/
a[k]='\0';/*去除空格后字符组长度减一,原字符组最后一位需要变为\0。
*/
continue;/*去除空格后,继续从该位检测,直至不符合该循环条件。
*/
}
else
i++;/*若不是连续两个空格,则跳到下个字符再进行循环。
*/
printf("%s\n",a);/*输出处理后的字符组。
*/
}
2.导入及导出函数
voiddaoru()
{
FILE*p;/*定义一个指针函数,用于指向需要打开的文件。
*/
charb[30];/*定义一个字符型组,用于存放导入文件地址。
*/
system("cls");/*清屏,使界面更美观。
*/
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
printf("∷∷\n");
printf("∷请输入要打开的文件名∷\n");
printf("∷∷\n");
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
scanf("%s",b);/*得到导入文件名,存放在b里*/
p=fopen(b,"r");/*将导入文件以只读方式打开*/
if(p==NULL)
{
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
printf("∷文件不存在!
请重新输入文件名!
∷\n");
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
system("pause");
daoru();/*若文件打开出错,则提示打不开,然后重新运行导入函数*/
}
else
fgets(a,1000,p);/*在p所指向的文件(即导入文件)中读入一个最长为999字符的字符串,并在最后加一个’\0’字符,然后存放于字符组a中*/
}
voiddaochu()
{
intb;/*定义整形变量b,用于选择操作*/
FILE*p2;/*定义一个指向文件的指针变量*/
charc[30];/*定义一个字符型组,用于存放导出文件地址*/
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※请输入要保存到哪个文件?
※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
scanf("%s",c);/*得到导出文件名,存放在c里*/
p2=fopen(c,"w+");/*将导出文件以读写方式打开*/
fputs(a,p2);/*将a里的字符串存放在p2指向的地址里*/
fclose(p2);/*关闭文件,防止数据丢失*/
printf("导出成功!
文件保存在%s\n回到主界面
(1)?
退出程序
(2)?
\n",buf);
fflush(stdin);/*用于清除输入缓存防止下次用scanf输入时出现错误*/
scanf("%d",&b);
if(b==1)
zhujiemian();
elseif(b==2)
tuichu();/*根据用户输入进行跳转*/
}
四、算法流程图
1.算法图
2.算法说明
此程序通过函数实现了对文章的处理,,每个环节都可以用函数进行实现,使用者可以用函数实现对文章的输入、导入以及去除空格,统计,保存等各种操作的实现。
五、程序设计过程中遇到的问题及解决过程
1.函数比较长,经常出现没有定义就使用一个变量,比较容易发现及修改。
2.问题解决不彻底,例如去空格,最开始能去除,可是去除不完全,最后有重新整理想法,编写程序。
3.写的快就会出现函数字符写错,例如printf写成prntf,也很容易发现。
4.系统库里的函数理解不清晰,使用起来系统报错。
最后熟悉了就没有这样的我问题了。
5.最开始考虑问题不全面,就会出现子函数单独运行没问题,放在一起就出问题,最后合在一起时一点点改动。
六、运行截图
1.欢迎界面
2.主界面
3.输入文章
4.导入文章
5.处理选择界面
6.统计界面
7.替换界面
8.导出文章
9.退出程序
七、参考文献
【1】谭浩强,《C语言程序设计》(第四版)[M],清华大学出版社,2008年
八、源程序
#include
#include
#include
#include
#include
voidsan();
voider();
voidyi();/*欢迎界面子函数*/
voidzhujiemian();/*主界面函数*/
voidshuru();/*输入文章函数*/
voiddaoru();/*导入文章函数*/
voidqiandao(chara[]);/*去除前导空格函数*/
voidhoudao(chara[]);/*去除后导空格函数*/
voidzhongjian(chara[]);/*去除中间多余空格函数*/
voidtongji(chara[]);/*统计单词频率函数*/
voidtihuan(chara[]);/*替换单词函数*/
voiddaochu();/*导出函数*/
voidxuanze();/*选择及跳转函数*/
voidtuichu();/*退出界面函数*/
chara[999];/*用于文章存储字符组*/
charbuf[200];/*用于存储文章导出路径*/
intmain()
{
inth;
getcwd(buf,sizeof(buf));
system("color0a");
for(h=4;h>0;h--)
{
system("cls");
if(h==4)
{
printf("\n\n\n\n");
printf("\t\t★★★★★★★★★★\n");
printf("\t\t★★★★★★\n");
printf("\t\t★★★★★★★\n");
printf("\t\t★欢迎★使用★\n");
printf("\t\t★★★\n");
printf("\t\t★★★★\n");
printf("\t\t★★★★\n");
printf("\t\t★★\n");
printf("\t\t加载中....\n");
Sleep(1000);
}
elseif(h==3)
san();
elseif(h==2)
er();
else
yi();
Sleep(700);
}
zhujiemian();
return0;
}
voidsan()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t\t\t\3\3\3\3\3\3\3\3\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\3\3\3\3\3\3\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\3\3\3\3\3\3\3\3\n");
}
voider()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t\t\t\3\3\3\3\3\3\3\3\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\3\3\3\3\3\3\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\3\3\3\3\3\3\3\3\n");
}
voidyi()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\n");
printf("\t\t\t\t\3\3\3\3\3\3\n");
}
voidzhujiemian()
{
intb;
system("cls");
printf("\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3计科\3一班\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3金\3航\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3张勇\3乐乐\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\3\3\3\3\n");
printf("\3\3\3\3\3\3\3\n");
printf("\3\3\3\n");
printf("\3\n");
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("◆1.输入文章◆\n");
printf("◆2.导入文章◆\n");
printf("◆3.退出程序◆\n");
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
scanf("%d",&b);
switch(b)
{
case
(1):
shuru();qiandao(a);houdao(a);zhongjian(a);xuanze();break;
case
(2):
daoru();qiandao(a);houdao(a);zhongjian(a);xuanze();break;
case(3):
tuichu();
}
}
voidshuru()
{
system("cls");
printf("⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
printf("⊙⊙\n");
printf("⊙请输入文章:
⊙\n");
printf("⊙⊙\n");
printf("⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
fflush(stdin);
gets(a);
}
voidxuanze()
{
intx;
system("cls");
printf("⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
printf("⊙处理后文章⊙\n");
printf("⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
printf("\n");
printf("%s\n",a);
printf("\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("〓1.返回主菜单〓\n");
printf("〓2.统计〓\n");
printf("〓3.替换〓\n");
printf("〓4.导出〓\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("请输入您的选择:
");
scanf("%d",&x);
switch(x)
{
case
(1):
a[0]='\0';zhujiemian();break;
case
(2):
tongji(a);break;
case(3):
tihuan(a);break;
case(4):
daochu();
}
}
voiddaoru()
{
FILE*p;
charb[30];
system("cls");
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
printf("∷∷\n");
printf("∷请输入要打开的文件名∷\n");
printf("∷∷\n");
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
scanf("%s",b);
p=fopen(b,"r");
if(p==NULL)
{
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
printf("∷文件不存在!
请重新输入文件名!
∷\n");
printf("∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
system("pause");
daoru();
}
else
fgets(a,1000,p);
}
voidqiandao(chara[])
{
charc;
inti,j,k=0,n;
n=strlen(a);
for(i=0;(c=a[i])!
='\0';i++)
{
if(c=='')
k=k+1;
else
break;
}
n=n-k;
for(j=0,i=k;j{
a[j]=a[i];
}
a[n]='\0';
}
voidhoudao(chara[])
{
intj,k=0,n;
n=strlen(a);
for(j=n-1;a[j]!
='\0';j--)
{
if(a[j]=='')
k=k+1;
else
break;
}
n=n-k;
a[n]='\0';
}
voidzhongjian(chara[])
{
inti,j,k;
k=strlen(a);
for(i=0;iif(a[i]!
='')
i++;
elseif(a[i]=='')
if(a[i+1]=='')
{
k=k-1;
for(j=i;ja[j]=a[j+1];
a[k]='\0';
continue;
}
else
i++;
printf("%s\n",a);
}
voidtongji(chara[])
{
inti,j=0,k=0,x;
charm;
chary[30],z[30];
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※请输入需要统计的单词※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
scanf("%s",y);
for(i=0;i<(strlen(a)+1);i++)
if(a[i]!
=''&&a[i]!
=','&&a[i]!
='.'&&a[i]!
='!
'&&a[i]!
='?
'&&a[i]!
=';'&&a[i]!
='\0')
{z[j]=a[i];z[j+1]='\0';j++;}
else
{j=0;
if(strcmp(y,z)==0)
{
k=k+1;
z[0]='\0';
}
}
printf("%s这个单词出现了%d次!
\n",y,k);
system("pause");
xuanze();
}
voidtihuan(chara[])
{
inti,j=0,k=0,d,b,c;
intx;
chary[30],z[30],m[30],x1[999];
printf("请输入需要被替换的单词\n");
scanf("%s",y);
printf("\n");
printf("请输入需要替换成什么单词?
\n");
scanf("%s",m);
for(i=0;i<(strlen(a)+1);i++)
if(a[i]!
=''&&a[i]!
=','&&a[i]!
='.'&&a[i]!
='!
'&&a[i]!
='?
'&&a[i]!
=';'&&a[i]!
='\0')
{z[j]=a[i];z[j+1]='\0';j++;}
else
{j=0;
if(strcmp(y,z)==0)
{
strcpy(x1,a);
d=strlen(m)-strlen(y);
for(b=0;b<999-i;b++)
a[i+d+b]=x1[i+b];
for(c=0;ca[i-strlen(y)+c]=m[c];
b=0;c=0;x1[0]='\0';z[0]='\0';
}
}
printf("替换后的文章为\n");
printf("%s\n",a);
system("pause");
xuanze();
}
voiddaochu()
{
intb;
FILE*p2;
charc[30];
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※请输入要保存到哪个文件?
※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
scanf("%s",c);
p2=fopen(c,"w+");
fputs(a,p2);
fclose(p2);
printf("导出成功!
文件保存在%s\n回到主界面
(1)?
退出程序
(2)?
\n",buf);
fflush(stdin);
scanf("%d",&b);
if(b==1)
zhujiemian();
elseif(b==2)
tuichu();
}
voidtuichu()
{
system("cls");
printf("\n\n\n\n");
printf("\t\t \\\\\\\|///\n");
printf("\t\t \\\\ .-.- //\n");
printf("\t\t. ( .@.@ )\n");
printf("\t\t+-------oOOo-----(_)-----oOOo---------+\n");
printf("\t\t| |\n");
printf("\t\t| 谢谢使用 |\n");
printf("\t\t| |\n");
printf("\t\t+---------------------Oooo--------