本来想着在运行框手动输入文章,然而思考了一段时间,这样太麻烦了。于是想起C语言打开本地文件!但是会用到文件流等方面的知识!估计要理解花不少时间!
文件在进行读写操作之前要先打开,使用完毕要关闭。
根据实例,我在本地E盘根目录下新建了一个txt文件,其内容为随意输入的几个字符,然后开始初步实现打开文件!
但是由于我们计算的是字母,而上述程序是一行一行读取,所以,继续:
以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符。主要使用两个函数,分别是 fgetc() 和 fputc()。
这里为了需求,我们就只了解fgetc()函数。
这个时候我们就可以放进去英文文章《friend》!
(忘记除掉中文!)
接下来主要目的就是应用我最初编写的C语言程序二(只实现计算出每个小写字母的个数),代码如下:
#include<stdio.h>
void main()
{
char a[10000];//一篇英文文章
char b[26];
int s[26] = { 0 };//用于存储字符的个数
printf("input message:\n");
gets(a);
for (int x = 0; x < 26; x++)
{
int c = 0;//记录每个字符个数
b[x] = x + 97;//为了让b[0]是a,b[1]是b依次类推
for(int i=0;a!='\0';i++)
{
if (b[x] == a)
{
++c;
s[x] = c;
}
}
if (s[x]>=1)//只输出输入中有的字母 的个数
{
printf("%c %d\n", b[x], s[x]);
}
}
}
写了半天,还是不行,只能统计出a字母的个数:
经过测试,我怎么感觉是while语句出了问题,但是while语句网上,就是这么写的呀!
噢噢噢噢!突然灵光一闪,瞬间明白,此时计算了a字母的个数同时,已经把文件内容读取完毕,这个时候的ch==EOF,并没有重新从文本开始重新计数。所以,,,,百度搜索怎么把文件指针重新指向文件开头:
使用rewind(fp);
兴高采烈......
运行程序:
成功了!怎么没有z?难道边界错了?
为了检查,在data.txt文件里末尾加三个z,运行发现:这篇文章没有z,意味着这才是成功的最后一步。
回望题目,做了这么久,上述程序只是计算小写字母的计入,大写的字母还得转换成小写字母再一起输出,为了检验程序的正确性!文章简单一点:
接下来,就是把每个单词的首字母改成大写。
似乎有点儿困难,再尝试:
忽略其中各种百度的过程以及调试,反正最后是成功了,并成功新建了一个文件copy.txt:
最后的C语言代码为:
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
FILE *fw;
char ch;
char b[26];
int inword=1;
int s[26] = { 0 };//用于存储字符的个数
if( ( fp = fopen("D:\\data.txt", "rt") ) == NULL)
{
printf("Fail to open file:data.txt!");
exit(0);
}
if( ( fw = fopen("D:\\copy.txt", "wt") ) == NULL)
{
printf("Fail to open file:copy.txt!");
exit(0);
}
for (int x = 0; x < 26; x++)
{
int c = 0; //记录每个字符个数
b[x] = x + 97; //为了让b[0]是a,b[1]是b依次类推......
while((ch=fgetc(fp)) != EOF) //每次读取一个字节,直到读取完毕
{
if(ch>=65 && ch<=90)
{
ch=ch+32;
}
if (b[x] == ch)
{
++c;
s[x] = c;
}
}
if (s[x]>=1) //只输出输入中有的字母的个数
{
printf("%c %d\n", b[x], s[x]);
}
if(b[x]!='z')
{
rewind(fp);
}
}
rewind(fp); //重新调整指针
while((ch=fgetc(fp)) != EOF)
{
if (inword==0)
{
if(ch>='a' && ch<='z' && ch!=' ')
{
ch = ch - 32;
inword = 1;
fputc(ch,fw);
}
else
{
inword=1;
fputc(ch,fw);
}
}
else
{
if (ch == ' ')
{
inword = 0;
fputc(ch,fw);
}
else
{
fputc(ch,fw);
}
}
}
printf("\n");
fclose(fp);
fclose(fw);
}
现在才开始进入汇编!(这么点知识,弄了一天,现在已经晚上九点半了)