C语言题解字符串变形算法示例

 更新时间:2023年08月10日 08:42:12   作者:吴尼玛  
这篇文章主要为大家介绍了C语言题解字符串变形的方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题引

对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。需要考虑字符串结尾是空格的情况。

数据范围: 1≤n≤10^6106 , 字符串中包括大写英文字母、小写英文字母、空格。

进阶:空间复杂度 O(n) , 时间复杂度 O(n)

题目保证给定的字符串均由大小写字母和空格构成。

示例1.

输入:
"This is a sample",16

返回值:
"SAMPLE A IS tHIS"

示例2.

输入:
"This is a sample ",17

返回值:
" SAMPLE A IS tHIS"

示例3.

输入:
"iOS",3

返回值:
"Ios"

思路

解答代码的思路:先按空格分割字符串,将分割后的字符串存入栈中,根据栈的特点,后面的单词会先弹出,最后将出栈的字符串反转大小写后拼接成返回的字符串中。

写法会更简单的思路:是先遍历整个字符串来反转大小写。然后分割字符串,入栈,出栈,拼接字符串。

还有双逆转的思路:也是先遍历整个字符串来反转大小写。然后先逆转一次整个字符串,再以空格为界逆转每个单词的字符串。

解答代码

#include <string>
#include <stack>
class Solution {
public:
    /**
     * @param s string字符串 
     * @param n int整型 
     * @return string字符串
     */
    string trans(string s, int n) {
        // write code here
        string res;
        res.reserve(n);
        stack<string> strs;
        string tmp;
        for (int i = 0; i < n; i++) {
            char c = s[i];
            if (c != ' ') {
                tmp.push_back(c);
            } else {
                // 将空格隔开的字符串入栈
                strs.push(tmp);
                tmp.clear();
            }
            // 字符串结尾没有空格,要将最后一个找到的字符串入栈
            if (i == n-1 && !tmp.empty()) {
                strs.push(tmp);
            }
        }
        // 排除结尾空格的特殊情况
        if (s[n - 1] == ' ') {
            res.push_back(' ');
        }
        while (!strs.empty()) {
            // 将找到的字符串一个个出栈
            auto cur = strs.top();
            strs.pop();
            // 转换大小写
            for (int i = 0; i < cur.size(); i++) {
                char c = cur[i];
                // 65~90为26个大写英文字母,97~122号为26个小写英文字母,两者相差32
                char new_char = c >= 'a' && c <= 'z' ? c - 32 : c + 32;
                cur[i] = new_char;
            }
            res.append(cur);
            if (strs.size() > 0) {
                res.push_back(' ');
            }
        }
        return res;
    }
};

以上就是C语言题解字符串变形方法示例的详细内容,更多关于C语言题解字符串变形的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Libmicrohttpd搭建内嵌(本地)服务器的方法

    使用Libmicrohttpd搭建内嵌(本地)服务器的方法

    下面小编就为大家带来一篇使用Libmicrohttpd搭建内嵌(本地)服务器的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • C++获取硬件参数的示例详解

    C++获取硬件参数的示例详解

    这篇文章主要为大家详细介绍了如何使用C++获取硬件参数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • opencv摄像头捕获识别颜色

    opencv摄像头捕获识别颜色

    这篇文章主要介绍了opencv摄像头捕获识别颜色,用opencv通过摄像头捕获识别颜色,红色蓝色等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 详解C++异常处理三个重要组成部分

    详解C++异常处理三个重要组成部分

    这篇文章主要为大家介绍了C++异常处理的三个重要组成部分示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • C++实现字符串元音字母反转的两种方法

    C++实现字符串元音字母反转的两种方法

    在处理字符串问题时,我们经常需要对其中的字符进行操作,例如反转、替换等,本文将详细讨论如何在C++中实现仅反转字符串中的所有元音字母,并返回结果字符串,需要的朋友可以参考下
    2024-07-07
  • 统计C语言二叉树中叶子结点个数

    统计C语言二叉树中叶子结点个数

    这篇文章主要介绍的是统计C语言二叉树中叶子结点个数,文章以C语言二叉树中叶子结点为基础分享一个简单小栗子讲解,具有一定的知识参考价值,需要的小伙伴可以参考一下
    2022-02-02
  • C语言实现选择排序、直接插入排序、冒泡排序的示例

    C语言实现选择排序、直接插入排序、冒泡排序的示例

    这篇文章主要介绍了C++实现选择排序、直接插入排序、冒泡排序的代码示例,相当简洁直观,也是算法和数据结构学习中的基础,需要的朋友可以参考下
    2016-02-02
  • C指针原理教程之编译原理-小型计算器实现

    C指针原理教程之编译原理-小型计算器实现

    本文给大家分享的是如何使用C语言编写一个小型计算器的实例代码,有需要的小伙伴可以参考下
    2019-02-02
  • C语言算法练习之佩奇借书

    C语言算法练习之佩奇借书

    这篇文章主要该大家分享C语言佩奇借书的练习,文章主要通过描述佩奇借书的问题然后确定程序框架将结果运算出来,下面来看详细内容吧,需要的朋友可以参考一下
    2022-03-03
  • C++浅拷贝与深拷贝及引用计数分析

    C++浅拷贝与深拷贝及引用计数分析

    这篇文章主要介绍了C++浅拷贝与深拷贝及引用计数分析的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论