【问题描述】编写一个程序,读入几行文本,并打印一个表格。此表格按照单词在文本
长度不超过20个字符每行文本字符数不超过80,输入文本中的单词个数不超过1000个。
(2)编写一个函数readWords()从读入的几行文本中抽取每个单词,将其存储在二维数组
(1)可定义一个二维字符数组char words[1001][21]用于按照输入文本中单词出现的顺
要求:
中出现的顺序,显示每个不同单词(不区分大小写)在文本中的出现次数。约定每个单词的
序依次存储每个单词。
words中。(3)编写一个函数countAndPrintWords(),依次计算words数组中每个单词出现的次数,
并按照每行显示五个单词的格式,依次打印出每个单词出现的次数。
(4)在main函数中,调用上述定义的函数。
提取单词及个数用数组和函数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2021-11-13 22:55关注
代码如下:
#include <iostream> using namespace std; //判断ch是否是字母 int isZm(char ch) { if( (ch >='a' &&ch <='z') || (ch>='A' && ch <='Z') || (ch == '\'') ) return 1; else return 0; } char tolower(char ch) { if(ch>='A' && ch <='Z') return ch + 32; else return ch; } void readWords(char words[][21],int &nmb) { int i,n; char buf[100]; nmb = 0; //单词数量 cout << "请输入读取的行数:" ; cin >> n; cin.get(); cout << "请输入" << n << "行字符:"<<endl; for (i=0;i<n;i++) { cin.getline(buf,80); int j = 0; int k = 0; while(buf[j] && (!isZm(buf[j])) ) j++; while(buf[j]) { if(isZm(buf[j])) { words[nmb][k] = tolower(buf[j]); k++; }else //假设单词中只有英文字母,没有特殊符号(如.') { if(isZm(buf[j-1])) { words[nmb][k] = 0; nmb++; k = 0; } } j++; } if(isZm(buf[j-1])) { words[nmb][k] = 0; nmb++; k=0; } } } //统计单词数量 void countAndPrintWords(char words[][21],int nmb) { int i,j; int cnt[1001]; for(i=0;i<nmb;i++) cnt[i] = 0; cnt[0] = 1; for (i = 1;i<nmb;i++) { for (j=0;j<i;j++) { if( strcmp(words[i],words[j]) == 0 ) { cnt[j]++; break; } } if(j == i) cnt[i] = 1; } //显示 int kt = 0; for (i=0;i<nmb;i++) { if (cnt[i] != 0) { cout << words[i] << " " << cnt[i] << " "; kt++; if(kt%5==0) cout << endl; } } } int main() { char words[1001][21]; int nmb; readWords(words,nmb); countAndPrintWords(words,nmb); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 Python语言实验
- ¥15 SAP HANA SQL 增加合计行
- ¥20 用C#语言解决一个英文打字练习器,有偿
- ¥15 srs-sip外部服务 webrtc支持H265格式
- ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
- ¥15 大一C语言期末考试,求帮助🙏🙏
- ¥15 ch340驱动未分配COM
- ¥15 Converting circular structure to JSON
- ¥30 Hyper-v虚拟机相关问题,求解答。
- ¥15 TSM320F2808PZA芯片 Bootloader