注释
此文章内容均属实以该文章可以完成课程设计也可进行复刻补充来提高自身代码实战编写能力
要求
设计内容:
分别统计出其中英文字母数和空格数及整篇文章总字数;
统计某一字符串在文章中出现的次数,并输出该次数;
删除某一子串,并将后面的字符前移,输出删除某一字符串后的
(1) 输入一页文字,每行最多不超过80个字符,共N行(N=5);输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
(2)分别统计出其中英文字母数和空格数及整篇文章总字数
(3)统计某一字符串在文章中出现的次数,并输出次数;
(4)删除某一子串,并将后面的字符前移,输出删除某一字符串后的文章;
(5)输出形式:
a)分行输出用户输入的各行字符;
b)分4行输出“全部字母数"、“数字个数”、“空格个数”、“文章总字数”等信息。
设计要求:
(1)符合课题要求,实现相应功能;
(2)要求界面友好美观,操作方便易行;
(3)注意程序的实用性、安全性;
主要操作说明
//输入文本
inputText(lines, &numLines);
//分行输出用户输入的各行字符
printf("\n用户输入的文本内容如下:\n");
printText(lines, numLines);
//统计字母数、数字个数、空格个数及总字数
int letterCount = 0, digitCount = 0, spaceCount = 0,
totalCount = 0;
countCharacters(lines, numLines, &letterCount, &digitCount,
&spaceCount, &totalCount);
printf("\n统计结果:\n");
printf("全部字母数:%d\n", letterCount);
printf("数字个数:%d\n", digitCount);
printf("空格个数:%d\n", spaceCount);
printf("文章总字数:%d\n", totalCount);
//输入要查找的子串
char substring[MAX_CHARS_PER_LINE];
printf("\n请输入要查找的子串:");
fgets(substring, MAX_CHARS_PER_LINE, stdin);
substring[strcspn(substring, "\n")] = '\0'; //去掉换行符
//统计子串出现的次数
int occurrences = countSubstringOccurrences(lines, numLines, substring);
printf("子串\"%s\"出现的次数:%d\n", substring, occurrences);
//输入要删除的子串
printf("\n请输入要删除的子串:");
fgets(substring, MAX_CHARS_PER_LINE, stdin);
substring[strcspn(substring, "\n")] = '\0'; //去掉换行符
//删除子串并输出结果
deleteSubstring(lines, numLines, substring);
printf("\n删除子串\"%s\"后的文本内容如下:\n", substring);
printText(lines, numLines);
return 0;
}
//输入文本
void inputText(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int *numLines) {
printf("请输入文本(每行最多不超过80个字符,输入空行结束):\n");
while (*numLines < MAX_LINES) {
printf("行%d:", *numLines + 1);
fgets(lines[*numLines], MAX_CHARS_PER_LINE, stdin);
lines[*numLines][strcspn(lines[*numLines], "\n")] = '\0'; //去掉换行符
if (strlen(lines[*numLines]) == 0) break; //输入空行结束
(*numLines)++;
}
}
//打印文本
void printText(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines) {
for (int i = 0; i < numLines; i++) {
printf("%s\n", lines[i]);
}
}
//统计字符数量
void countCharacters(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines, int *letters, int *digits, int *spaces, int *total) {
*letters = *digits = *spaces = *total = 0;
for (int i = 0; i < numLines; i++) {
for (int j = 0; j < strlen(lines[i]); j++) {
if (isalpha(lines[i][j])) (*letters)++;
if (isdigit(lines[i][j])) (*digits)++;
if (isspace(lines[i][j])) (*spaces)++;
(*total)++;
}
}
}
//统计子串出现次数
int countSubstringOccurrences(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines, const char *substring) {
int count = 0;
for (int i = 0; i < numLines; i++) {
char *pos = lines[i];
while ((pos = strstr(pos, substring))!= NULL) {
count++;
pos += strlen(substring);
}
}
return count;
}
//删除子串
void deleteSubstring(char lines[MAX_LINES][MAX_CHARS_PER_LINE], int numLines, const char *substring) {
int len = strlen(substring);
for (int i = 0; i < numLines; i++) {
char *pos;
while ((pos = strstr(lines[i], substring))!= NULL) {
memmove(pos, pos + len, strlen(pos + len) + 1);
}
}
}