英文小说存于一个文本文件中。
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数和出现的位置(输出行号,或高亮显示);
(3)删除某一子串,并将后面的字符前移。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出“全部字母数”、“数字个数”、“空格个数”、“文章总字数”;
(3)删除某一字符串后的文章写入文件中。
(4)希望能用C语言按上面要求运行出来
急用,抱拳谢谢!
之前写的:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 200
//查找big中出现smal的次数
void findstr(char* big, char* smal, int pos[], int* nmb)
{
int i, j, lenb, lens;
lenb = strlen(big);
lens = strlen(smal);
*nmb = 0;
if (lens > lenb)
return;
i = 0;
while (i < lenb - lens + 1)
{
for (j = 0; j < lens; j++)
{
if (tolower(big[i + j]) != tolower(smal[j])) //不区分大小写,如果区分大小写,则去掉tolower
break;
}
if (j == lens) //说明找到
{
pos[*nmb] = i;
(*nmb)++;
i += lens;
}
else
i++;
}
}
int main()
{
int row = 0;//文本实际的行数
FILE* fp; //文件指针
char buf[N][100] = { 0 }; //缓存每行文本数据,每行最多100个字节
int nmbZm = 0, nmbSz = 0, nmbSpace = 0, total = 0;//字母数、数字数、空格数、总字符数
int times = 0; //某个单词出现的次数
int pos[N]={0}; //记录单词出现的位置
int pos_nmb = 0;
char smal[20] = { 0 };//需要查找的字符串
int i, j, tmp = 0;//临时变量
char hc[100] = { 0 };//临时变量--删除字符串时使用
if (!(fp = fopen("a.txt", "r")))
{
printf("文件打开失败\n");
return 0;
}
printf("开始读文件...\n");
while (!feof(fp))
{
memset(buf[row], 0, 100);
fgets(buf[row], 100, fp);//逐行读取文件
row++;
}
fclose(fp);
//1.统计英文字母、数字、空格、总文本长度
for (i = 0; i < row; i++)
{
total += strlen(buf[i]);
for (j = 0; j < strlen(buf[i]); j++)
{
if ((buf[i][j] >= 'a' && buf[i][j] <= 'z') || (buf[i][j] >= 'A' && buf[i][j] <= 'Z'))
nmbZm++;
else if (buf[i][j] >= '0' && buf[i][j] <= '9')
nmbSz++;
else if (buf[i][j] == ' ')
nmbSpace++;
}
}
printf("字母的个数:%d\n", nmbZm);
printf("数字的个数:%d\n", nmbSz);
printf("空格的个数:%d\n", nmbSpace);
printf("文本总字符数:%d\n", total);
//2.查询某个字符出现的次数
printf("请输入要查找的字符串:");
scanf("%s", smal);
for (i = 0; i < row; i++)
{
findstr(buf[i], smal, pos, &tmp);
if (tmp)
{
pos[pos_nmb++] = i + 1;//记录行号
}
}
printf("%s出现的行号:",smal);
for (i = 0; i < pos_nmb; i++)
printf("%d ", pos[i]);
printf("\n");
//3.删除某个字符串(删除所有行中出现的字符串),并写入文件
if (!(fp = fopen("a.txt", "w")))
{
printf("文件打开失败\n");
return 0;
}
memset(smal, 0, 20);
printf("请输入需要删除的字符串:");
scanf("%s", smal);
for (i = 0; i < row; i++)
{
findstr(buf[i], smal, pos, &tmp);
tmp--;
while (tmp >= 0)
{
memcpy(buf[i] + pos[tmp], buf[i] + pos[tmp] + strlen(smal), strlen(buf[i]) - strlen(smal) - pos[tmp]);
tmp--;
buf[i][strlen(buf[i]) - strlen(smal)] = '\0';
}
//
fputs(buf[i], fp);
}
fclose(fp);
return 0;
}
你可以先试着做一做,试试,有问题再来提问
自己可搜索着写,百度参考