实现:
- 统计字符串中单词的数量。
- 查找字符串中最长的单词,并显示其长度。
- 将字符串中的所有单词首字母大写。
- 将字符串中的所有单词反转。
要求:
- 使用面向对象的方式实现,包括至少一个类(例如 StringProcessor)。
- 不使用现成的字符串处理函数(例如 Split、Reverse 等),自行实现相应的功能。
- 提供命令行界面,不需要图形用户界面。
代码实现:
1.定义StringProcessor类
public class StringProcessor
{private string _input;public StringProcessor(string input){_input = input;}
}
2.统计字符串中单词的数量。
// 统计字符串中单词的数量
public int CountWords()
{int count = 0;bool inWord = false;foreach (char c in _input){if (char.IsWhiteSpace(c)){inWord = false;}else{if (!inWord){count++;inWord = true;}}}return count;
}
3.查找字符串中最长的单词,并显示其长度。
// 查找字符串中最长的单词,并显示其长度
public (string word, int length) FindLongestWord()
{int maxLength = 0;string longestWord = "";string currentWord = "";foreach (char c in _input){if (char.IsWhiteSpace(c)){if (currentWord.Length > maxLength){maxLength = currentWord.Length;longestWord = currentWord;}currentWord = "";}else{currentWord += c;}}if (currentWord.Length > maxLength){maxLength = currentWord.Length;longestWord = currentWord;}return (longestWord, maxLength);
}
4.将字符串中的所有单词首字母大写。
// 将字符串中的所有单词首字母大写
public string CapitalizeWords()
{char[] result = new char[_input.Length];bool newWord = true;for (int i = 0; i < _input.Length; i++){if (char.IsWhiteSpace(_input[i])){result[i] = _input[i];newWord = true;}else{if (newWord && char.IsLetter(_input[i])){result[i] = char.ToUpper(_input[i]);newWord = false;}else{result[i] = _input[i];}}}return new string(result);
}
5. 将字符串中的所有单词反转。
// 将字符串中的所有单词反转
public string ReverseWords()
{char[] result = new char[_input.Length];int start = 0, end = 0;while (start < _input.Length){while (end < _input.Length && !char.IsWhiteSpace(_input[end])){end++;}int wordEnd = end - 1;for (int i = start; i < end; i++){result[i] = _input[wordEnd--];}while (end < _input.Length && char.IsWhiteSpace(_input[end])){result[end] = _input[end];end++;}start = end;}return new string(result);
}
6.main函数
static void Main(string[] args){Console.WriteLine("请输入一个字符串:");string input = Console.ReadLine();StringProcessor processor = new StringProcessor(input);Console.WriteLine("单词数量:" + processor.CountWords());var (word, length) = processor.FindLongestWord();Console.WriteLine($"最长的单词:{word}, 长度:{length}");Console.WriteLine("首字母大写:" + processor.CapitalizeWords());Console.WriteLine("单词反转:" + processor.ReverseWords());}
7.完整代码
using System;class Program
{static void Main(string[] args){Console.WriteLine("请输入一个字符串:");string input = Console.ReadLine();StringProcessor processor = new StringProcessor(input);Console.WriteLine("单词数量:" + processor.CountWords());var (word, length) = processor.FindLongestWord();Console.WriteLine($"最长的单词:{word}, 长度:{length}");Console.WriteLine("首字母大写:" + processor.CapitalizeWords());Console.WriteLine("单词反转:" + processor.ReverseWords());}
}public class StringProcessor
{private string _input;public StringProcessor(string input){_input = input;}// 统计字符串中单词的数量public int CountWords(){int count = 0;bool inWord = false;foreach (char c in _input){if (char.IsWhiteSpace(c)){inWord = false;}else{if (!inWord){count++;inWord = true;}}}return count;}// 查找字符串中最长的单词,并显示其长度public (string word, int length) FindLongestWord(){int maxLength = 0;string longestWord = "";string currentWord = "";foreach (char c in _input){if (char.IsWhiteSpace(c)){if (currentWord.Length > maxLength){maxLength = currentWord.Length;longestWord = currentWord;}currentWord = "";}else{currentWord += c;}}if (currentWord.Length > maxLength){maxLength = currentWord.Length;longestWord = currentWord;}return (longestWord, maxLength);}// 将字符串中的所有单词首字母大写public string CapitalizeWords(){char[] result = new char[_input.Length];bool newWord = true;for (int i = 0; i < _input.Length; i++){if (char.IsWhiteSpace(_input[i])){result[i] = _input[i];newWord = true;}else{if (newWord && char.IsLetter(_input[i])){result[i] = char.ToUpper(_input[i]);newWord = false;}else{result[i] = _input[i];}}}return new string(result);}// 将字符串中的所有单词反转public string ReverseWords(){char[] result = new char[_input.Length];int start = 0, end = 0;while (start < _input.Length){while (end < _input.Length && !char.IsWhiteSpace(_input[end])){end++;}int wordEnd = end - 1;for (int i = start; i < end; i++){result[i] = _input[wordEnd--];}while (end < _input.Length && char.IsWhiteSpace(_input[end])){result[end] = _input[end];end++;}start = end;}return new string(result);}
}
运行结果:
实验小结
通过本次实验,我们成功实现了一个字符串处理器,并巩固了以下知识和技能:
- 面向对象编程:掌握了如何定义类和方法,如何创建对象,以及如何通过对象调用方法。
- 字符串处理:学习了如何手动实现基本的字符串操作,如统计单词数量、查找最长单词、首字母大写和单词反转。
- C# 编程:熟悉了 C# 的基本语法和控制台应用程序的开发流程。
重难点分析
- 字符串遍历与处理:在不使用现成的字符串处理函数的情况下,手动实现字符串操作需要对字符串的遍历和字符处理有深入理解。特别是在处理单词的边界和处理连续空白字符时,需要仔细考虑各种情况。
- 单词反转的实现:在反转单词时,需要正确识别单词的起始和结束位置,并正确地反转字符顺序。这需要对字符串索引和字符操作非常熟悉。
- 代码鲁棒性:处理不同的输入情况,如多个连续空格、空字符串等,需要确保代码的健壮性,避免出现意外错误。