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: ...
随机推荐
- 在mybtis的映射文件中判断集合大小
<if test="groupIds != null and groupIds.size>0"> and (group_id in<foreach coll ...
- C# 获取USB设备信息
C# 获取USB设备信息WMI方式 using System; using System.Management; using System.Text.RegularExpressions; using ...
- ThinkPHP5使用phpspreadsheet导入导出Excel
引用类: use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use Php ...
- vue子组件数据变化同步到父组件中
方法:通过watch监听子组件数据变化 1.父组件中注册方法 <Child @getChildValue="getChildValue"></Child> ...
- openresty开发系列16--lua中的控制结构if-else/repeat/for/while
openresty开发系列16--lua中的控制结构if-else/repeat/for/while 一)条件 - 控制结构 if-else if-else 是我们熟知的一种控制结构.Lua 跟其他语 ...
- ISO/IEC 9899:2011 条款6.7——声明
6.7 声明 语法 1.declaration: declaration-specifiers init-declarator-listopt ; static_assert-declar ...
- mtcnn论文学习
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 使用多任务级联卷积网络连接人脸检 ...
- STL补充--set集合相等判断
一:问题引出 #include <iostream> #include <map> #include <set> using namespace std; map& ...
- 【DataBase】H2 DateBase的简单使用
H2介绍 H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容. H2还提供兼容模式,可以兼容一些主流的数据库,因此 ...
- java使用Sonic 算法对音频变速不变声、变调、调整音量
依赖库:https://github.com/waywardgeek/sonic 基础库:Sonic.java /* Sonic library Copyright 2010, 2011 Bill C ...