如何不使用LinQ等内置方法从数组中提取去重后的唯一单词
实现提取唯一单词并按字母序输出的方案
前置约束
- 禁止使用LinQ相关语法和方法
- 禁止调用
Array.Reverse、Array.Sort内置数组处理方法 - 输出为输入中所有出现过的唯一单词,按字母升序排列
代码实现逻辑
1. 调整输入读取逻辑
你目前的初始代码是逐行读取内容存入数组,不符合输入为单行空格分隔单词的场景,需要先读取整行输入再按空格拆分得到原始单词数组。
2. 手动实现去重逻辑
遍历原始单词数组,逐个判断当前单词是否已经存入去重数组,未存在时才写入,避免重复。
3. 手动实现冒泡排序
用基础的冒泡排序算法对去重后的单词数组按字母升序排序,避免调用内置排序方法。
完整可运行代码
using System; class Program { static void Main() { // 读取输入并拆分原始单词数组 string input = Console.ReadLine().Trim(); string[] originWords = input.Split(' '); // 初始化去重数组,最大长度不超过原始单词数组长度 string[] uniqueWords = new string[originWords.Length]; int uniqueCount = 0; // 去重逻辑 for (int i = 0; i < originWords.Length; i++) { bool isExist = false; // 检查当前单词是否已经在去重数组中 for (int j = 0; j < uniqueCount; j++) { if (originWords[i] == uniqueWords[j]) { isExist = true; break; } } // 不存在则加入去重数组 if (!isExist) { uniqueWords[uniqueCount] = originWords[i]; uniqueCount++; } } // 冒泡排序逻辑,按字母升序排列 for (int i = 0; i < uniqueCount - 1; i++) { for (int j = 0; j < uniqueCount - 1 - i; j++) { // 比较字符串字母顺序,前面的比后面的大就交换 if (string.Compare(uniqueWords[j], uniqueWords[j + 1]) > 0) { string temp = uniqueWords[j]; uniqueWords[j] = uniqueWords[j + 1]; uniqueWords[j + 1] = temp; } } } // 输出结果 for (int i = 0; i < uniqueCount; i++) { Console.Write(uniqueWords[i] + " "); } } }
功能验证
输入示例:pineapple pear citron banana pineapple peach peach kiwi mandarin pineapple cherry pear pear citron
输出结果与需求给出的示例完全匹配。
内容的提问来源于stack exchange,提问作者Aleksandar Yordanov
相关产品推荐
相关产品推荐

