1185: 零起点学算法92——单词数(C)
一、题目
http://acm.wust.edu.cn/problem.php?id=1185&soj=0
二、分析
- 统计的是不同的单词数,即重复的单词只统计一次;
- 多组输入;
- 每行不超过1000个字符,可用一维数组读取;
- 输入‘#’表示结束;
- 文章只有小写字母和空格组成。
三、思路
用article读取整行字符串,然后依次判断每个字符,并将它们按照单词存到paper中,全部放入后,将paper的第一维,按照字符串(a-z)排序,最后在paper中,依次比较相邻的单词,相同则跳过,不同则单词数numOfWordsNoRepeat加1,最后输出单词数,并换行。
补充说明:
输入以下数据:
a ac ax a s z ax
#
| a | a | c | a | x | a | s | z | a | x | \0 |
| a | \0 | ||||||||||||||||||||||||
| a | c | \0 | |||||||||||||||||||||||
| a | x | \0 | |||||||||||||||||||||||
| a | \0 | ||||||||||||||||||||||||
| s | \0 | ||||||||||||||||||||||||
| z | \0 | ||||||||||||||||||||||||
| a | x | \0 |
| a | \0 | ||||||||||||||||||||||||
| a | \0 | ||||||||||||||||||||||||
| a | c | \0 | |||||||||||||||||||||||
| a | x | \0 | |||||||||||||||||||||||
| a | x | \0 | |||||||||||||||||||||||
| s | \0 | ||||||||||||||||||||||||
| z | \0 |
结果有5个单词。
四、代码
#include<stdio.h>
#include<string.h> // strcmp函数
#include<stdlib.h> // qsort函数
#define MAX_CHAR 1001 // 一行最大字符数
int main() {
char article[MAX_CHAR], paper[MAX_CHAR][40]; // 保存文章
int i, j, theWordSubscript, newWord, numOfWordsNoRepeat;
while (gets(article) && article[0] != '#') {
theWordSubscript = -1; // 最初没有单词,初始化下标为-1
newWord = 1; // 是否是新单词,1是新单词,0不是新单词
for (i = 0; article[i] != '\0'; i++) {
if (article[i] == ' ') { // 下标为i的字符是空格
newWord = 1; // 下个字符是新单词的首字符,newWord置1
}
else {
if (newWord == 1) { // 当前字符是新单词的首字符
theWordSubscript++; // 单词下标加1
newWord = j = 0; // 接下来的不是新单词,newWord置0;j重置为第一个字符
}
paper[theWordSubscript][j++] = article[i]; // 复制当前字符到二维数组中,j自增
paper[theWordSubscript][j] = '\0'; // 末尾赋值为结束符,表示字符串(当前单词)结束
}
}
if (theWordSubscript > 0) { // 单词数(包含重复的)大于1的话,将所有单词排序a-z
qsort(paper, theWordSubscript + 1, sizeof(char) * 40, strcmp); // 排序函数
}
if (theWordSubscript >= 0) { // 至少有一个单词的话,输出数据,否则输出
numOfWordsNoRepeat = 1; // 单词数初始化为1
for (i = 0; i < theWordSubscript; i++) { // 统计不重复单词数
if (strcmp(paper[i], paper[i + 1]) != 0) { // 不重复,单词数加1
numOfWordsNoRepeat++;
}
}
printf("%d\n", numOfWordsNoRepeat); // 输出单词数
}
}
return 0;
}
五、截图

1185: 零起点学算法92——单词数(C)的更多相关文章
- Problem B: 零起点学算法92——元素前移1位
#include<stdio.h> int main() { ],b[]; while(scanf("%d",&n)!=EOF) { ;i<n;i++) ...
- 1145: 零起点学算法52——数组中删数II
1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 293 ...
- 1147: 零起点学算法54——Fibonacc
1147: 零起点学算法54--Fibonacc Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 20 ...
- 1133: 零起点学算法40——多组测试数据(a+b)II
1133: 零起点学算法40--多组测试数据(a+b)II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitte ...
- 1101: 零起点学算法08——简单的输入和计算(a+b)
1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitt ...
- 1179: 零起点学算法86——小明A+B(未弄懂)
1179: 零起点学算法86——小明A+B Time Limit: 1 Sec Memory Limit: 32 MB 64bit IO Format: %lldSubmitted: 2540 ...
- 1164: 零起点学算法71——C语言合法标识符(存在问题)
1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 10 ...
- 1163: 零起点学算法70——Yes,I can!
1163: 零起点学算法70--Yes,I can! Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: ...
- 1137: 零起点学算法44——多组测试数据输出II
1137: 零起点学算法44--多组测试数据输出II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: ...
随机推荐
- Leet Code 1.两数之和
给定一个整数nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 可以假设每种输入只会对应一个答案.但是,不能重复利用这个数组中同样的元素. 题解 提交代 ...
- grep awk 查看nginx日志中所有访问的ip并 去重
111.225.78.157 - - [13/Aug/2019:16:03:08 +0800] "POST /api/login HTTP/1.1" 200 249 "h ...
- 关于PHP中token的生成的解析
背景 很多时候我们需要用 token 来作为一些标识, 比如: 一个用户登录后的认证标识. 实现方式 md5 的方式: $v = 1; // 自己定义的 需要hash 的value 值 $key = ...
- Oracle基本操作 ora-01031 insufficient privileges
- 网络通信技术中的中继器repeater
1. repeater的作用 对信号进行再生和还原 2. repeater的优点 延长通讯距离 提高可靠性 增加节点的最大数目 各个网段可以使用不同的通讯速率 3. repeater的缺点 增加了延时 ...
- 完美解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题
①:例如很多人第一步就会这样做: 出现:Cannot download "https://github.com/sass/node-sass/releases/download/版本号/XX ...
- VAE论文学习
intractable棘手的,难处理的 posterior distributions后验分布 directed probabilistic有向概率 approximate inference近似推 ...
- asp设置cookies过期时间
Response.Cookies("user_name").Expires=Date+1 '指定cookie保存时间 保留COOKIES一个小时 Response.Cookies( ...
- 复习sql server 2000 MSDE2000 ,安装,打补丁,开1433端口。
前言: 由于工作需要,一个仍在使用的古董软件需要安装配置. 原有系统是在主机部署,单机安装sql2000,其他机器(分机)也单机部署软件,部署sql2000,通过dtsrun /f sync.dts( ...
- Golang中的Map(集合)
Map 是一种无序的键值对的集合.Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值. Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它.不过,Map 是无 ...