【C#】字符串处理器

实现:

  1. 统计字符串中单词的数量。
  2. 查找字符串中最长的单词,并显示其长度。
  3. 将字符串中的所有单词首字母大写。
  4. 将字符串中的所有单词反转。

要求:

  • 使用面向对象的方式实现,包括至少一个类(例如 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);}
}

运行结果:

 

实验小结

通过本次实验,我们成功实现了一个字符串处理器,并巩固了以下知识和技能:

  1. 面向对象编程:掌握了如何定义类和方法,如何创建对象,以及如何通过对象调用方法。
  2. 字符串处理:学习了如何手动实现基本的字符串操作,如统计单词数量、查找最长单词、首字母大写和单词反转。
  3. C# 编程:熟悉了 C# 的基本语法和控制台应用程序的开发流程。

重难点分析

  1. 字符串遍历与处理:在不使用现成的字符串处理函数的情况下,手动实现字符串操作需要对字符串的遍历和字符处理有深入理解。特别是在处理单词的边界和处理连续空白字符时,需要仔细考虑各种情况。
  2. 单词反转的实现:在反转单词时,需要正确识别单词的起始和结束位置,并正确地反转字符顺序。这需要对字符串索引和字符操作非常熟悉。
  3. 代码鲁棒性:处理不同的输入情况,如多个连续空格、空字符串等,需要确保代码的健壮性,避免出现意外错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/30120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频智能分析平台智能边缘分析一体机视频监控业务平台区域人数不足检测算法

智能边缘分析一体机区域人数不足检测算法是一种集成了先进图像处理、目标检测、跟踪和计数等功能的算法&#xff0c;专门用于实时监测和统计指定区域内的人数&#xff0c;并在人数不足时发出警报。以下是对该算法的详细介绍&#xff1a; 一、算法概述 智能边缘分析一体机区域…

怎么把pdf文件转cad图纸?方法分享!

怎么把pdf文件转cad图纸&#xff1f;在数字化时代&#xff0c;PDF和CAD作为两种常见的文件格式&#xff0c;各自在各自的领域发挥着重要作用。然而&#xff0c;当需要在两者之间进行转换时&#xff0c;许多人可能会感到困惑和无从下手。今天&#xff0c;我将为大家推荐三款强大…

【无标题】小红书618投放高效复盘|种草效果评估

618大促进入尾声&#xff0c;品牌投放是否达到预期目标&#xff1f;如何找准复盘重点&#xff1f;如何衡量种草效果&#xff1f;如何沉淀优质的策略&#xff1f; 基于这些问题&#xff0c;千瓜推出618小红书投放复盘攻略&#xff0c;帮助品牌厘清复盘思路&#xff0c;在大促后快…

数组和文本三剑客

数组&#xff1a; 数组的定义&#xff1a;在集合当中指定多个元素&#xff0c;元素的类型&#xff1a;整数&#xff0c;字符串&#xff0c;浮点数。 数组的作用&#xff1a;可以一次性的定义多个元素&#xff0c;可以为变量赋值提供便利。 数组的定义方法&#xff1a; 数组…

手机录屏声音怎么录?2个小妙招教会你

手机录制好的视频怎么没有声音&#xff1f;你是否也遇到了这个难题&#xff1f;在日常生活中&#xff0c;手机录屏功能已经成为我们生活和工作中的得力助手。而录屏的声音&#xff0c;作为录屏功能的重要组成部分&#xff0c;更是为我们的录制体验增添了不少色彩。那么&#xf…

SSA-CNN多输入时序|樽海鞘算法-卷积神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…

Termius for Mac/Win:跨平台多协议远程管理利器

Termius for Mac/Win是一款备受瞩目的跨平台多协议远程管理软件&#xff0c;以其卓越的性能、丰富的功能和便捷的操作体验&#xff0c;赢得了广大用户的青睐。无论是在企业IT管理、系统维护&#xff0c;还是个人远程连接、文件传输等方面&#xff0c;Termius都展现出了出色的实…

乾坤微服务的使用

前言&#xff1a; 在这里整理下用乾坤来开发微服务的一些资料。 使用好处&#xff1a; 使用乾坤可以实现什么效果呢&#xff1f;众所周知&#xff0c;前端的框架五花八门&#xff0c;react/vue/angular等各领风骚&#xff0c;那么如果我们有需要把不同技术栈的项目整合起来&…

Mysql启动报错:本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止

某天开机,发现Mysql被异常关闭,并且启动不起来,出这篇文章也是为了下次遇到类似问题,迅速解决(请细读文章,因为第二个方案才是主要方案) 第一个解决方案 我采用的第一个方法查“端口占用“问题(因为这是一篇博客所以我写的操作比较详细为了方便后面看这篇博客的人,我自…

如何在前端项目中用字体图标替换图片,方便减小打包体积和统一切换颜色

1.进入阿里妈妈矢量图标图库 地址&#xff1a;阿里妈妈矢量图 2.搜索自己想要的图标 3.添加自己想要的图标 4.把刚才选的图标&#xff0c;添加到自己要下载的项目 5.把项目下载到本地 6.引入iconfont.css 在div上增加对应的类名就可以啦 下载的所有类名都在下面的demo_index…

MySQL从5.7升级到8.0步骤及其问题

MySQL从5.7升级到8.0步骤及其问题 前言 本文源自微博客&#xff0c;且以获得授权&#xff0c;请尊重版权。 一、需求背景 Docker环境下&#xff0c;MySQL5.7升级到8.0&#xff0c;数据迁移时使用的是mysqldump方式迁移。 二、迁移步骤 数据备份&#xff1a; docker exec -i 1…

python-画三角形

[题目描述] 输入一个正整数n&#xff0c;请使用大写字母拼成一个这样的三角形图案&#xff08;参考样例输入输出&#xff09;&#xff1a;三角形图案的第1行有1个字母&#xff0c;第2行有2个字母&#xff0c;以此类推&#xff1b;在三角形图案中&#xff0c;由上至下、由左至右…

使用高德API计算两个地址的距离

要使用高德地图API来计算两个城市之间的距离&#xff0c;你需要首先在高德开放平台上注册并获取API密钥&#xff08;AK&#xff09;。以下是一个使用Java调用高德地图API来计算两个城市之间距离的示例代码。 步骤 1: 获取高德地图API密钥 访问高德开放平台&#xff08;https:…

GIS设计与开发课程设计(三)

环境&#xff1a;Windows10专业版 ArcGIS10.2 ArcEngine10.2 Visual Studio 2019 因每个人电脑版本和软件版本不同&#xff0c;运行的结果可能不同 系列文章&#xff1a; GIS设计与开发课程设计&#xff08;一&#xff09; GIS设计与开发课程设计&#xff08;二&#xff09;…

Apple Watch开发入门知识,还是很有必要的

随着现在 Apple 生态圈的发展&#xff0c;越来越多的 App 会把自己的简化版从 iOS 迁移至 WatchOS&#xff08;支付宝、微信、手Q、头条、QQ音乐、网易云音乐等等&#xff0c;都有Watch版App&#xff09;。官方开发文档&#xff1a;Setting up a watchOS project | Apple Devel…

神经网络学习3-卷积层

膨胀卷积&#xff0c;也被称为空洞卷积或扩张卷积&#xff0c;是一种特殊的卷积运算&#xff0c;它在标准卷积的基础上引入了一个额外的超参数&#xff0c;即膨胀率&#xff08;dilation rate&#xff09;。这个超参数决定了在卷积核的元素之间插入多少额外的空间。通过这种方式…

04-对原生app应用中的元素进行定位

本文介绍对于安卓原生app应用中的元素如何进行定位。 一、uiautomatorviewer uiautomatorviewer是Android-SDK自带的一个元素定位工具&#xff0c;非常简单好用&#xff0c;可以使用该工具查看app应用中的元素属性&#xff0c;帮助我们在代码中进行元素定位。 1&#xff09;使…

el-table 固定前n行 配合 max-height 生效

:row-class-name"TableRowClassName" 加上类名 <el-table:data"computedTableList"borderstyle"width: 100%":row-class-name"TableRowClassName"max-height"800"><el-table-column fixed prop"name"…

【OS基础】符合AUTOSAR标准的RTAOS-Alarms详解

目录 前言 正文 7.报警Alarms 7.1配置Alarms 7.1.1激活一个任务 7.1.2 设置一个事件 7.1.3报警回调Alarm Callback 7.1.4 增加计数器值 7.2设置Alarms 7.2.1 绝对Alarms 7.2.2 相对Alarm 7.3自启动Alarms 7.4 删除Alarms 7.5确认何时会发生Alarm 7.6非周期Alarm…

细致解析跨境电商多平台搭建利器-179海关接口源码应用方法

介绍 跨境电商已成为当前电商行业的热门发展方向之一。为满足跨境电商的需求&#xff0c;各大平台纷纷推出了多平台搭建利器。其中&#xff0c;179海关接口源码是一款非常实用的工具&#xff0c;本文将对其应用方法进行细致解析。 了解179海关接口源码 179海关接口源码可以帮…