一、题目

http://acm.wust.edu.cn/problem.php?id=1185&soj=0

二、分析

  1. 统计的是不同的单词数,即重复的单词只统计一次;
  2. 多组输入;
  3. 每行不超过1000个字符,可用一维数组读取;
  4. 输入‘#’表示结束;
  5. 文章只有小写字母和空格组成。

三、思路

用article读取整行字符串,然后依次判断每个字符,并将它们按照单词存到paper中,全部放入后,将paper的第一维,按照字符串(a-z)排序,最后在paper中,依次比较相邻的单词,相同则跳过,不同则单词数numOfWordsNoRepeat加1,最后输出单词数,并换行。

补充说明:

输入以下数据:

  a  ac  ax  a  s z ax
#
article
    a     a c     a x     a     s   z   a x     \0  
排序前paper
a \0                                                
a c \0                                              
a x \0                                              
a \0                                                
s \0                                                
z \0                                                
a x \0                                              
排序后paper
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)的更多相关文章

  1. Problem B: 零起点学算法92——元素前移1位

    #include<stdio.h> int main() { ],b[]; while(scanf("%d",&n)!=EOF) { ;i<n;i++) ...

  2. 1145: 零起点学算法52——数组中删数II

    1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 293 ...

  3. 1147: 零起点学算法54——Fibonacc

    1147: 零起点学算法54--Fibonacc Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 20 ...

  4. 1133: 零起点学算法40——多组测试数据(a+b)II

    1133: 零起点学算法40--多组测试数据(a+b)II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitte ...

  5. 1101: 零起点学算法08——简单的输入和计算(a+b)

    1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitt ...

  6. 1179: 零起点学算法86——小明A+B(未弄懂)

    1179: 零起点学算法86——小明A+B Time Limit: 1 Sec  Memory Limit: 32 MB   64bit IO Format: %lldSubmitted: 2540  ...

  7. 1164: 零起点学算法71——C语言合法标识符(存在问题)

    1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 10 ...

  8. 1163: 零起点学算法70——Yes,I can!

    1163: 零起点学算法70--Yes,I can! Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: ...

  9. 1137: 零起点学算法44——多组测试数据输出II

    1137: 零起点学算法44--多组测试数据输出II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: ...

随机推荐

  1. 利用原生JS实时监听input框输入值

    传送门https://www.cnblogs.com/lantinggumo/p/7636715.html 传送门https://www.cnblogs.com/nailc/p/8572226.htm ...

  2. sass登陆页面实例

    sass登陆页面实例 一.总结 一句话总结: sass使用非常方便:使用就是将sass转化为css引入,并且动态监听让sass转化为css,可以很方便的所见即所得 1.sass安装? npm就可以按照 ...

  3. Open with Sublime 右键打开

    Open with Sublime Sublime 的右键打开没有了,可以使用下面的bat命令添加.   @echo off SET st3Path=D:\Program Files\Sublime ...

  4. Kettle建立数据库链接报错-'MS SQL Server' driver (jar file) is installed. kettle的bug,对于12.2而言

    1.链接sql server数据库报错 错误连接数据库 [My_vm_win_sql] : org.pentaho.di.core.exception.KettleDatabaseException: ...

  5. 蓝牙BLE: 蓝牙4.0 BLE广播数据解析(转)

    BLE 设备工作的第一步就是向外广播数据.广播数据中带有设备相关的信息.本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析. 1. 广播模式 BLE 中有两种角色 Central 和 Per ...

  6. Leetcode: Rotated Digits

    X is a good number if after rotating each digit individually by 180 degrees, we get a valid number t ...

  7. Centos7搭建OpenNebula云平台

    OpenNebula概述 OpenNebula是专门为云计算打造的开源系统,用户可以使用Xen.KVM.VMware等虚拟化软件一起打造企业云.利用OpenNebula可以轻松构建私有云.混合云.公开 ...

  8. 【转载】 准人工智能分享Deep Mind报告 ——AI“元强化学习”

    原文地址: https://www.sohu.com/a/231895305_200424 ------------------------------------------------------ ...

  9. 复习sql server 2000 MSDE2000 ,安装,打补丁,开1433端口。

    前言: 由于工作需要,一个仍在使用的古董软件需要安装配置. 原有系统是在主机部署,单机安装sql2000,其他机器(分机)也单机部署软件,部署sql2000,通过dtsrun /f sync.dts( ...

  10. [ kvm ] 学习笔记 1:Linux 操作系统及虚拟化

    1. 前言 一台计算机是由一堆硬件设备组合而成,在硬件之上是操作系统,操作系统与计算机硬件密不可分,操作系统用来管理所有的硬件资源提供服务,各个硬件设备是通过 总线 进行连接起来的: 在操作系统之上, ...