c - 如何计算字符串中特殊字符的数量?
问题描述
我正在编写一个程序来计算行数、单词、字符、数字、字母和特殊字符。到目前为止,程序几乎完成了,但是特殊字符给我带来了麻烦。我使用带有 if 语句的 while 循环来计算这些字符,并在 else 语句中使用特殊字符。有人可以指出我正确的方向吗?
这是我正在使用的字符串:
欢迎来到 CIS158。C和Tux都在努力,你呢?希望您玩得开心并学习新技能。既然如此,理应如此,是时候说“祝你学期愉快!”
尝试了增加特殊字符的 else 语句。
// Declare a pointer to fopen function to access welcome file
FILE *fp = fopen("/classes/cis158/cntwlc/welcome", "r");
char fileName[100];
char ch;
int lineCount, charCount, wordCount, abcCount, numCount, speCount;
lineCount = 0;
wordCount = 0;
charCount = 0;
abcCount = 0;
numCount = 0;
speCount = 0;
gets(fileName);
//fp = fopen(fileName, "r");
while((ch = getc(fp)) != EOF) {
if(ch == '\n')
lineCount++;
if(ch == ' ' || ch == '\n')
wordCount++;
if(ch != ' ' || ch != '\n')
charCount++;
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
abcCount++;
if(ch >= '0' && ch <= '9')
++numCount;
else
speCount++;
ch++;
}
/*if(charCount > 0) {
++lineCount;
++wordCount;
}*/
printf("--- Text Statistics: ---\n\n");
printf("Lines %d\n", lineCount);
printf("Words %d\n", wordCount);
printf("Characters %d\n", charCount);
printf("Alphabetic %d\n", abcCount);
printf("Digits %d\n", numCount);
printf("Special %d\n", speCount);
getchar();
return 0;
//printf("%20s", &userInput);
}// main
这些是预期的结果:
--- 文本统计: --- 行 5 字 37 字符 188 字母 139 数字 3 特殊 9
这是我运行程序时得到的:
--- 文本统计:---
行 5 字 37 字符 188 字母 139 数字 3 特殊 185
解决方案
你的 else 只匹配关于数字的 if 。由于发生这种情况,任何不是数字的字符都将计入您的特殊字符计数。
我建议如下:
// Declare a pointer to fopen function to access welcome file
FILE *fp = fopen("/classes/cis158/cntwlc/welcome", "r");
char fileName[100];
char ch;
int lineCount, charCount, wordCount, abcCount, numCount, speCount;
lineCount = 0;
wordCount = 0;
charCount = 0;
abcCount = 0;
numCount = 0;
speCount = 0;
gets(fileName);
//fp = fopen(fileName, "r");
while((ch = getc(fp)) != EOF) {
if(ch == '\n')
lineCount++;
if(ch == ' ' || ch == '\n')
wordCount++;
if(ch != ' ' || ch != '\n')
charCount++;
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
abcCount++;
else if(ch >= '0' && ch <= '9')
++numCount;
else if(ch != ' ' && ch != '\n')
speCount++;
ch++;
}
/*if(charCount > 0) {
++lineCount;
++wordCount;
}*/
printf("--- Text Statistics: ---\n\n");
printf("Lines %d\n", lineCount);
printf("Words %d\n", wordCount);
printf("Characters %d\n", charCount);
printf("Alphabetic %d\n", abcCount);
printf("Digits %d\n", numCount);
printf("Special %d\n", speCount);
getchar();
return 0;
//printf("%20s", &userInput);
}// main
请注意,您的字数是错误的,但我会让您自己弄清楚。
推荐阅读
- c++ - 链接 C++ 项目时失败
- reactjs - 我需要一些关于学习路径的建议
- google-cloud-platform - 如何使用 jq 从 Google Video Intelligence API Speech Transcription JSON 输出中提取多个发言者的成绩单?
- node.js - NodeJS 中是否允许使用装饰器?
- sass - 在 @for 中使用 sass @function
- python - 遍历列表中的字典并将行添加到 DataFrame
- reactjs - 为用户保护 S3 存储桶?
- django - Django Views 存在不允许所有上下文变量出现在模板中的问题
- react-native - 如何在反应导航 5 的特定屏幕中禁用滑动操作?
- c - scanf("%*[\n] %[^\n]" 是做什么的?