酷代码 AI
菜单
服务商

C-1 句子反转 分数 30 作者 陈宇璟 单位 浙江大学 给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。 要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。 举一个例子: we choose to go 2 the 123 moon 程序应当输出: moon 321 the 2 go to choose we 输入格式 仅一行,即需要反转的句子。 输出格式 仅一行,表示程序对句子的处理结果。 说明/提示 样例解释 首先应当按单词逆序,即: moon 123 the 2 go to choose we 小写变大写、大写变小写、倒转自然数之后,得到最终结果: moon 321 the 2 go to choose we 数据规模与约定 对于 100% 的数据,句子中包含的单词数量不超过 1000,每个单词长度不超过 6。 输入样例: we choose to go 2 the 123 moon 输出样例: moon 321 the 2 go to,用C语言完成

以下是一个用C语言实现的句子反转程序,满足题目要求: ```c #include <stdio.h> #include <string.h> #include <ctype.h> void reverse_word(char *word) { int len = strlen(word); for (int i = 0; i < len / 2; i++) { char temp = word[i]; word[i] = word[len - 1 - i]; word[len - 1 - i] = temp; } } void process_word(char *word) { int is_number = 1; for (int i = 0; word[i] != '\0'; i++) { if (!isdigit(word[i])) { is_number = 0; break; } } if (is_number) { reverse_word(word); } else { for (int i = 0; word[i] != '\0'; i++) { if (islower(word[i])) { word[i] = toupper(word[i]); } else if (isupper(word[i])) { word[i] = tolower(word[i]); } } } } int main() { char sentence[6001]; // 假设每个单词最长6个字符,最多1000个单词,加上空格和结束符 fgets(sentence, sizeof(sentence), stdin); sentence[strcspn(sentence, "\n")] = '\0'; // 移除换行符 char *words[1000]; int word_count = 0; char *token = strtok(sentence, " "); while (token != NULL) { words[word_count++] = token; token = strtok(NULL, " "); } for (int i = word_count - 1; i >= 0; i--) { process_word(words[i]); printf("%s", words[i]); if (i > 0) { printf(" "); } } printf("\n"); return 0; } ``` 代码说明: 1. reverse_word函数:反转输入的字符串。 2. process_word函数:处理每个单词: - 检查单词是否为数字,如果是则反转。 - 如果不是数字,则转换大小写:小写转大写,大写转小写。 3. main函数: - 读取输入句子。 - 使用`strtok`分割句子为单词数组。 - 逆序处理单词数组,调用`process_word`处理每个单词。 - 输出处理后的单词,单词间用空格分隔。 注意事项: 1. 输入句子长度不超过6000个字符(1000个单词,每个最多6个字符,加上空格和结束符)。 2. 使用`fgets`读取输入,确保安全。 3. 处理完输入后,移除末尾的换行符。 4. 使用`strtok`分割字符串时,注意它会修改原始字符串。 调试与优化建议: 1. 输入处理:确保输入句子长度不超过缓冲区大小。 2. 内存管理:`strtok`会修改原始字符串,如果需要保留原始输入,应先复制。 3. 性能:对于大规模数据,可以考虑更高效的字符串处理方式。 示例输入输出: - 输入:`we choose to go 2 the 123 moon` - 输出:`MOON 321 THE 2 GO TO CHOOSE WE` 代码优化点: 1. 可以预先计算单词数量,避免动态调整数组大小。 2. 使用更高效的字符串反转方法(如指针交换)。 3. 添加输入验证,确保单词数量不超过1000。 调试建议: 1. 检查`strtok`是否正确分割字符串。 2. 确保`process_word`正确处理数字和非数字单词。 3. 验证逆序输出是否正确。 注意事项: 1. 输入长度:确保输入不超过缓冲区大小。 2. 字符串修改:`strtok`会修改原始字符串,如需保留,应先复制。 3. 边界条件:处理空输入或单个单词的情况。 [2025-10-25 11:34:26 | AI写代码神器 | 1010点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多