C语言实现句子反转:处理输入空格、内存管理与数字判断的要点
#include <stdio.h> #include <string.h> #include <ctype.h> // 判断一个字符串是否为自然数 int is_number(char *s) { for (int i = 0; s[i]; i++) { if (!isdigit(s[i])) { return 0; } } return 1; } // 反转一个字符串 void reverse_string(char *s) { int len = strlen(s); for (int i = 0; i < len / 2; i++) { char temp = s[i]; s[i] = s[len - 1 - i]; s[len - 1 - i] = temp; } } // 处理单个单词:小写转大写,大写转小写,数字反转 void process_word(char *word) { if (is_number(word)) { reverse_string(word); return; } int has_lower = 0, has_upper = 0; for (int i = 0; word[i]; i++) { if (islower(word[i])) has_lower = 1; if (isupper(word[i])) has_upper = 1; } // 全小写 -> 转大写 if (has_lower && !has_upper) { for (int i = 0; word[i]; i++) { word[i] = toupper(word[i]); } } // 全大写 -> 转小写 else if (has_upper && !has_lower) { for (int i = 0; word[i]; i++) { word[i] = tolower(word[i]); } } } int main() { char line[10000]; fgets(line, sizeof(line), stdin); // 去掉换行符 int len = strlen(line); if (len > 0 && line[len - 1] == '\n') { line[len - 1] = '\0'; } // 拆分单词 char *words[1000]; int word_count = 0; char temp_line[10000]; strcpy(temp_line, line); char *token = strtok(temp_line, " "); while (token != NULL) { words[word_count] = (char *)malloc(strlen(token) + 1); strcpy(words[word_count], token); word_count++; 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"); // 释放内存 for (int i = 0; i < word_count; i++) { free(words[i]); } return 0; } 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: - 输入字符串可能包含多个连续空格,需确保使用正确的分词方式避免出错。 - 动态分配内存后必须正确释放,防止内存泄漏。 - 数字反转时要确保只对纯数字字符串操作,避免将含字母的字符串误判为数字。 ######[AI写代码神器 | 712点数解答 | 2025-10-25 11:35:19]
- Python借助WordNet计算“开心”与“悲伤”句子语义相似度全解析(字节豆包 | 554点数解答 | 2024-11-11 23:20:31)204
- Python 借助 WordNet 计算“开心”与“悲伤”句子语义相似度全解析 (讯飞星火 | 999点数解答 | 2024-11-11 23:23:14)239
- Python借助WordNet计算“开心”与“悲伤”句子语义相似度全解析(GPT | 1241点数解答 | 2024-11-11 23:24:01)201
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)36
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)41
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- C++实现九九乘法表输出及代码详细解释(字节豆包 | 412点数解答 | 2026-02-06 22:10:32)60
- Python 编程:轻松统计输入字符中字母、数字、空格及其他字符个数(字节豆包 | 239点数解答 | 2024-10-26 20:53:28)200
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)182
- 工程师必备!10 种工程日常易用管理工具大揭秘(百度文心 | 346点数解答 | 2023-11-09 18:26:09)290
- 计算区间 n 到 m 中数字 x 出现次数的 Python 实现与详解(字节豆包 | 289点数解答 | 2025-12-07 17:14:59)71
- Python 实现:计算区间 n 到 m 中数字 x 出现的次数(字节豆包 | 322点数解答 | 2025-12-13 21:37:08)74