输入一句英文句子不包括标点符号,但句子前可能包含空格,可能不大写,输出单词个数,用c语言写

时间: 2023-05-30 09:04:31 浏览: 85
#include <stdio.h> #include <ctype.h> int main() { char sentence[1000]; // 假设句子最长为1000个字符 int count = 0; // 计数器初始化为0 printf("请输入句子:"); gets(sentence); // 输入句子,包括空格 // 判断句子开头是否是空格,是则去掉 if (isspace(sentence[0])) { for (int i = 0; sentence[i]; i++) { sentence[i] = sentence[i + 1]; } } // 统计单词数 for (int i = 0; sentence[i]; i++) { if (isspace(sentence[i])) { count++; } } count++; // 最后一个单词后没有空格,需要加1 printf("单词个数为:%d\n", count); return 0; }
相关问题

C语言给定一个字符串把其中各个单词的顺序颠倒,注意保持句首字母大写,标点符号不动。

可以使用以下步骤实现: 1. 定义一个函数,接受一个字符串参数,返回一个字符串结果。 2. 定义一个数组,存储每个单词的起始位置和长度。 3. 遍历字符串,找到每个单词的起始位置和长度,并将其存储到数组中。 4. 遍历数组,将每个单词反转。 5. 遍历数组,将每个单词的首字母大写。 6. 遍历数组,将每个单词连接起来,中间加上空格。 下面是实现该函数的代码: ```c #include <ctype.h> #include <string.h> char* reverseWords(char* s) { int len = strlen(s); int words[100][2]; int count = 0; int i = 0; while (i < len) { while (i < len && isspace(s[i])) i++; if (i == len) break; words[count][0] = i; while (i < len && !isspace(s[i])) i++; words[count][1] = i - words[count][0]; count++; } for (int i = 0; i < count; i++) { int start = words[i][0]; int end = words[i][0] + words[i][1] - 1; while (start < end) { char tmp = s[start]; s[start] = s[end]; s[end] = tmp; start++; end--; } } for (int i = 0; i < count; i++) { int idx = words[i][0]; s[idx] = toupper(s[idx]); } char* result = malloc(len + 1); memset(result, 0, len + 1); for (int i = 0; i < count; i++) { int start = words[i][0]; strncat(result, s + start, words[i][1]); if (i < count - 1) strcat(result, " "); } return result; } ``` 注意,该函数返回的字符串需要手动释放。可以这样调用: ```c char* s = "Hello, world!"; char* result = reverseWords(s); printf("%s\n", result); free(result); ```

C语言,给定一个字符串把其中各个单词的顺序颠倒,注意保持句首字母大写,标点符号不动。

可以使用以下步骤实现: 1. 定义一个函数,接受一个字符串参数,返回一个字符串结果。 2. 定义两个指针,分别指向字符串的开头和结尾。 3. 从结尾向开头遍历字符串,找到每个单词的结尾位置。 4. 再从每个单词的结尾位置向开头遍历,将每个单词反转。 5. 遍历字符串,将每个单词的首字母大写。 6. 遍历字符串,将每个单词连接起来,中间加上空格。 下面是实现该函数的代码: ```c #include <ctype.h> #include <string.h> char* reverseWords(char* s) { int len = strlen(s); char* start = s; char* end = s + len - 1; while (isspace(*end)) end--; char* word_end = end; while (word_end >= start) { if (isspace(*word_end)) { int word_len = end - word_end; char* word_start = word_end + 1; for (char* p = word_start; p < end; p++) { char tmp = *p; *p = *word_end; *word_end = tmp; word_end--; } end = word_end; word_end -= word_len + 1; } else { word_end--; } } for (char* p = s; p <= end; p++) { if (p == s || isspace(*(p - 1))) { *p = toupper(*p); } } char* result = malloc(len + 1); memset(result, 0, len + 1); char* p = s; while (p <= end) { if (!isspace(*p)) { strncat(result, p, 1); } else if (p > s && !isspace(*(p - 1))) { strcat(result, " "); } p++; } return result; } ``` 注意,该函数返回的字符串需要手动释放。可以这样调用: ```c char* s = "Hello, world!"; char* result = reverseWords(s); printf("%s\n", result); free(result); ```

相关推荐

最新推荐

recommend-type

输入一页文字,程序可以统计出文字、数字、空格的个数。

 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。  输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除...
recommend-type

C语言标准教程第一章 C语言概论

因此,这两个函数在括号中的参数表都由以下两部分组成: “格式控制串”,参数表 格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型。各种类型的格式表示法可参阅第三章。在printf函数中...
recommend-type

C语言编写文章编辑程序

(6)输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。 (7)输出形式: ① 分行输出用户输入的各行字符; ② 分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"; ③ 输出...
recommend-type

(谭浩强)c语言学习书

scanf和printf是标准输入输出函数,其头文件为stdio.h,在主函数前也用include命令包含了stdio.h文件。 需要说明的是,C语言规定对scanf和printf这两个函数可以省去对其头文件的包含命令。所以在本例中也可以删去第...
recommend-type

scrapy练习 获取喜欢的书籍

主要是根据网上大神做的 项目一 https://zhuanlan.zhihu.com/p/687522335
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。