【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. 代码鲁棒性:处理不同的输入情况,如多个连续空格、空字符串等,需要确保代码的健壮性,避免出现意外错误。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

展厅设计要考虑哪些问题

1、树立醒目的标志。 展馆设计说&#xff0c;与众不同可以吸引更多的参观者&#xff0c;让参观者更容易识别和寻找&#xff0c;给没进过展厅的人留下印象&#xff0c;但不要偏离展览目标和商业形象。环顾别人的设计图&#xff0c;后只有一种可能。不知道应该设计什么样的图纸&a…

AI产品组件——TTS产品

语音合成TTS 序列猴子TTS&#xff0c;每个发音人付费标准不同&#xff0c;通过序列猴子开放平台使用。 微软TTS&#xff0c;采用信用卡后付费模式。Speech Studio&#xff0c;付费模式采用统一付费的形式&#xff0c;音效有一款女声效果逼真。 女声&#xff1a;晓晓&#xff…

Python8 使用结巴(jieba)分词并展示词云

Python的结巴&#xff08;jieba&#xff09;库是一个中文分词工具&#xff0c;主要用于对中文文本进行分词处理。它可以将输入的中文文本切分成一个个独立的词语&#xff0c;为后续的文本处理、分析、挖掘等任务提供基础支持。结巴库具有以下功能和特点&#xff1a; 中文分词&a…

【免费API推荐】:解锁无限创意,让您的应用更具竞争力(8)

热门高效的免费实用类API是当今开发者们追逐的宝藏。这些API提供了各种热门功能和服务&#xff0c;能够帮助开发者轻松地为应用程序增添实用性和吸引力。无论是人脸识别、自然语言处理、机器学习还是图像处理&#xff0c;这些热门高效的免费API提供了强大的功能和高效的性能&am…

图纸管理的方法、图纸管理软件

图纸管理是一个复杂且关键的过程&#xff0c;它涉及到图纸的创建、存储、共享、修改、审核、存档和检索等多个环节。以下是根据参考文章总结的图纸管理的具体内容和方法&#xff1a; 一、图纸管理的目的 1、确保图纸的准确性&#xff1a;通过规范的管理流程和质量控制措施&…

设计模式——观察者模式(发布/订阅模式)

观察者模式(发布/订阅模式) 是一种行为模式&#xff0c;允许你定义一种订阅机制&#xff0c;可在对象事件发生时通知多个“观察”该对象的其他对象 观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时&am…

这么多人追捧的伦敦金陷阱是什么?

我们经常说伦敦金交易是有风险的&#xff0c;整个伦敦金市场中随时可能会出现陷阱&#xff0c;如果投资者不小心掉进这些陷阱&#xff0c;轻则被震荡离场&#xff0c;丢失原来已经盈利的仓位&#xff0c;重则可能还会承受交易本金的亏损。下面我们就来介绍两个在伦敦金交易市场…

基于DMAIC的SMT TX插件撞伤不良改善

在快速发展的电子制造领域&#xff0c;SMT&#xff08;表面贴装技术&#xff09;已经成为电子产品组装的核心技术之一。然而&#xff0c;SMT TX插件撞伤不良问题一直是制约生产效率与产品质量的瓶颈。本文将基于DMAIC&#xff08;定义、测量、分析、改进、控制&#xff09;方法…

网格布局之网格线编号定位

网格布局之网格线编号定位 欢迎关注&#xff1a;xssy5431 小拾岁月 参考链接&#xff1a;https://mp.weixin.qq.com/s/aOO1G3r1kH-cHDXJGPzK6g 点击查看 名词解释 网格线&#xff1a;用与表示网格开始与结束的线。每条网格线都是从 1 开始&#xff0c;分为 行网格线 与 列网…

Mcgs屏幕脚本程序

目录 1.脚本程序概述1.1 脚本程序简介1.2 脚本程序编辑环境 2.脚本程序语言要素2.1 变量和常量2.2 对象2.3 事件2.4 表达式2.5 联行符2.6 运算符2.7 系统函数 3. 基本语句3.1 赋值语句3.2 条件语句3.3 循环语句3.4 跳出语句3.5 退出语句3.6 注释语句3.7 声明语句3.6 命名规则 1…

小白如何重装系统win10?电脑一键重装系统傻瓜式操作!超详细步骤!

随着电脑的广泛应用&#xff0c;给笔记本/台式电脑系统重装已成为一项基本技能。对于电脑新手而言&#xff0c;如何重装Win10系统&#xff0c;或者更高版本的Win11系统可能是一个巨大的挑战。如果对电脑重装系统刚好有需要了解的小伙伴&#xff0c;不妨看看下面的干货分享。本文…

AI智能写作工具, 免费在线智能创作内容网站

对于需要创作内容的同学&#xff0c;选择一款适合自己的AI写作工具可以极大的提高创作效率。下面小编就来和大家分享几款可以生成高质量原创内容的AI写作工具。 1. Kimi智能助手 Kimi智能助手是一款集成了先进算法的AI工具&#xff0c;它能够理解复杂的语言模式&#xff0c;生…

Mp3文件结构全解析(一)

Mp3文件结构全解析(一) MP3 文件是由帧(frame)构成的&#xff0c;帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频 文件&#xff0c;MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组&#xff0c;特指活动影音压缩标准&#xff0c;MPEG 音频文件…

vue3delete请求报403forbidden,前后端解决方式,cookie无效问题

在做开发时&#xff0c;前期已经在Controller类加上CrossOrigin(origins "*")&#xff0c;发送get和post请求都没问题&#xff0c;但遇到delete请求时&#xff0c;又报出跨域问题 一.前端添加proxy代理服务器&#xff08;未能解决&#xff09; 在vue.config.js中使…

【实战】Spring Cloud Stream 3.1+整合Kafka

文章目录 前言新版版本优势实战演示增加maven依赖增加applicaiton.yaml配置新增Kafka通道消费者新增发送消息的接口 实战测试postman发送一个正常的消息postman发送异常消息 前言 之前我们已经整合过Spring Cloud Stream 3.0版本与Kafka、RabbitMQ中间件&#xff0c;简直不要太…

要改Google签名?这些你足够了解吗!

大家好&#xff0c;我是小编阿文。欢迎您关注我们&#xff0c;经常分享有关Android出海&#xff0c;iOS出海&#xff0c;App市场政策实时更新&#xff0c;互金市场投放策略&#xff0c;最新互金新闻资讯等文章&#xff0c;期待与您共航世界之海。 老项目keystore签名信息包含国…

python-画三角形

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

【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(链表)

揭秘高效存储模型与数据结构底层实现 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 链表使用场景List&#xff08;列表&#xff09;和 链表的关系链表的实现链表的节点list的源码实现结构模…

零信任是对抗AI威胁的“解药”

人工智能的变革力量正在重塑众多行业的业务运营。通过机器人流程自动化&#xff08;RPA&#xff09;&#xff0c;人工智能正在将人力资源从重复的、基于规则的任务中解放出来&#xff0c;并将其重点放在战略性的、复杂的操作上。此外&#xff0c;人工智能和机器学习算法可以以前…

防爆气象仪的工作原理

TH-WFB5矿山气象传感器在矿山安全监测系统中扮演着至关重要的角色&#xff0c;它们能够及时发现异常情况&#xff0c;为矿山的安全运营提供可靠的数据支持。矿山气象传感器能够实时监测矿山环境中的风速、风向、温度、湿度和大气压力等关键气象参数。这些传感器采用先进的传感技…