首页 > 编程语言 >C++查找最大元素与s.find()和s.insert()

C++查找最大元素与s.find()和s.insert()

时间:2024-07-14 09:30:59浏览次数:20  
标签:std insert string max pos C++ 字符串 find size

题目描述:

m老师在学习字符串的时候,对于字符串中的最大字符很感兴趣。
因此他想对于输入的每个字符串,查找其中的ASCII码最大字母,在该字母后面插入字符串“(max)”。

输入描述

输入数据包括多个测试实例,第一行输入一个整数n表示样例个数。每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。

输出描述

对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。

样例输入 1

2
abcdefgfedcba
xxxxx
样例输出 1

abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)

代码示例

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;
    cin.ignore(); // Ignore newline after reading n
    
    while (n--) {
        string s;
        getline(cin, s);
        
        // Find maximum ASCII character
        char max_char = '\0';
        for (char c : s) {
            if (c > max_char) {
                max_char = c;
            }
        }
        
        // Insert "(max)" after each occurrence of max_char
        int pos = 0;
        while ((pos = s.find(max_char, pos)) != string::npos) {
            s.insert(pos + 1, "(max)");
            pos += 6; // Move past the inserted "(max)"
        }
        
        cout << s << endl;
    }
    
    return 0;
}

1.str.find()函数

std::string::find() 函数是 C++ 标准库中 std::string 类提供的一个成员函数,用于在字符串中查找特定子串或字符的位置。让我详细解释一下它的用法和功能:

函数签名
在 C++ 标准库 头文件中,std::string::find() 有多个重载版本,其中常用的版本包括:

查找子串

size_t find(const std::string& str, size_t pos = 0) const;

这个版本用于在当前字符串对象中查找子字符串 str。它从位置 pos 开始查找,返回找到的第一个匹配子串的位置。如果未找到,返回 std::string::npos。

str:要查找的子字符串。
pos:从该位置开始查找,默认是从字符串的开头(位置 0)开始。
查找字符

size_t find(char c, size_t pos = 0) const noexcept;

这个版本用于在当前字符串对象中查找字符 c。同样从位置 pos 开始查找,返回找到的第一个匹配字符的位置。如果未找到,返回 std::string::npos。

c:要查找的字符。
pos:从该位置开始查找,默认是从字符串的开头(位置 0)开始。
返回值
std::string::npos 是一个静态成员常量,它表示在字符串中未找到指定的子串或字符。
示例用法
下面是一些示例,展示了如何使用 std::string::find() 函数来查找子串或字符的位置:

std::string s = "Hello, world!";

// 查找子串
size_t found = s.find("world");
if (found != std::string::npos) {
    std::cout << "Substring 'world' found at position: " << found << std::endl;
} else {
    std::cout << "Substring 'world' not found." << std::endl;
}

// 查找字符
char ch = '!';
size_t found_char = s.find(ch);
if (found_char != std::string::npos) {
    std::cout << "Character '!' found at position: " << found_char << std::endl;
} else {
    std::cout << "Character '!' not found." << std::endl;
}

在上面的例子中,如果字符串中找到了子串或字符,就会打印出它们的位置;否则会输出未找到的提示信息。

2.str.insert()函数
std::string::insert() 是 C++ 标准库中 std::string 类提供的成员函数,用于在字符串中插入其他字符串、字符或者字符序列。它的作用是在指定位置插入另一个字符串的内容。

函数签名
在 C++ 标准库 头文件中,std::string::insert() 有多个重载版本,常用的版本包括:

插入字符串

std::string& insert(size_t pos, const std::string& str);

这个版本在当前字符串的位置 pos 处插入字符串 str 的内容,并返回修改后的字符串引用。

pos:要插入的位置,可以是当前字符串的任意有效位置。
str:要插入的字符串。
插入字符

std::string& insert(size_t pos, const std::string& str, size_t subpos, size_t sublen);
std::string& insert(size_t pos, const char* s);
std::string& insert(size_t pos, const char* s, size_t n);
std::string& insert(size_t pos, size_t n, char c);

这些版本允许在指定位置 pos 处插入字符或者字符序列。

subpos 和 sublen:指定从 str 中插入的子串的起始位置和长度。
s:C 风格字符串指针,可以是以 null 终止的字符数组。
n:插入的字符数。
c:要插入的字符。
返回值
std::string&:返回修改后的字符串的引用,允许对结果进行链式调用。
示例用法
下面是一些示例,演示如何使用 std::string::insert() 函数在字符串中插入内容:

std::string s = "Hello, world!";
std::string suffix = " everyone";

// 在指定位置插入字符串
s.insert(7, suffix); // 在位置 7 插入 " everyone"
std::cout << s << std::endl; // 输出: Hello, everyone world!

// 在字符串末尾插入字符
s.insert(s.length(), 3, '!'); // 在字符串末尾插入三个 '!'
std::cout << s << std::endl; // 输出: Hello, everyone world!!!

// 在字符串开头插入字符串
s.insert(0, "Greetings, "); // 在开头插入 "Greetings, "
std::cout << s << std::endl; // 输出: Greetings, Hello, everyone world!!!

// 使用迭代器插入字符
std::string to_insert = " from ChatGPT";
s.insert(s.begin() + 10, to_insert.begin(), to_insert.end()); // 在位置 10 插入 " from ChatGPT"
std::cout << s << std::endl; // 输出: Greetings, Hello from ChatGPT, everyone world!!!

// 插入 C 风格字符串
const char* additional = " Have a nice day!";
s.insert(29, additional); // 在位置 29 插入 " Have a nice day!"
std::cout << s << std::endl; // 输出: Greetings, Hello from ChatGPT, everyone Have a nice day! world!!!

在上述示例中,我们展示了如何使用不同版本的 std::string::insert() 函数,在字符串中指定位置插入新的内容。这些函数在处理字符串时非常有用,特别是需要动态构建或修改字符串内容时。

标签:std,insert,string,max,pos,C++,字符串,find,size
From: https://blog.csdn.net/FGGFFoj/article/details/140412214

相关文章

  • C++ STL常用容器之vector(顺序容器)
    文章目录前言一、vector的介绍1.1vector的优点1.2vector的缺点1.3使用场景二、vector常用的操作2.1创建、初始化以及遍历容器2.2查询容器大小2.3访问容器中的元素2.4往容器中添加元素2.5删除容器中的元素2.6清空容器中的元素总结前言本文主要介绍C++STL......
  • C++ //练习 14.44 编写一个简单的桌面计算器使其能处理二元运算。
    C++Primer(第5版)练习14.44练习14.44编写一个简单的桌面计算器使其能处理二元运算。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >FileName:ex14.44.cpp >Author: >Mail: >C......
  • Android C++系列:Linux常用函数和工具
    1.时间函数1.1文件访问时间#include<sys/types.h>#include<utime.h>intutime(constchar*name,conststructutimebuf*t);返回:若成功则为0,若出错则为-1如果times是一个空指针,则存取时间和修改时间两者都设置为当前时间;如果times是非空指针,则存取时......
  • Android C++系列:Linux进程间关系
    1.终端在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(ControllingTerminal),在前面文章我们说过,控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况......
  • C++ //练习 15.5 定义你自己的Bulk_quote类。
    C++Primer(第5版)练习15.5练习15.5定义你自己的Bulk_quote类。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >FileName:ex15.3.cpp >Author: >Mail: >CreatedTime:Fri12J......
  • C++ //练习 15.7 定义一个类使其实现一种数量受限的折扣策略,具体策略是:当购买书籍的数
    C++Primer(第5版)练习15.7练习15.7定义一个类使其实现一种数量受限的折扣策略,具体策略是:当购买书籍的数量不超过一个给定的限量时享受折扣,如果购买量一旦超过了限量,则超出的部分将以原价销售。环境:LinuxUbuntu(云服务器)工具:vim 代码块/**************************......
  • 模型部署 - TensorRT - C++版本与Python版本应如何选择
    从性能角度来看,TensorRTC++版本和Python版本之间确实存在一些差异:C++版本性能更优:TensorRTC++版本使用了更底层的API,可以更好地利用硬件特性,进行更深层的优化。C++版本在内存管理、CPU-GPU数据传输等方面更加高效,这些都可以带来更好的推理性能。Python版本更易......
  • c++初始化列表和构造函数初始化的区别
    在C++中,初始化列表和构造函数初始化是两种不同的方法用于初始化类的成员变量。初始化列表(InitializationList):初始化列表是在构造函数的参数列表后面使用冒号(:),然后跟随着每个成员变量的初始化方式。通过初始化列表,可以在对象构造时直接为成员变量赋值,而不是在构造函数体内......
  • C++客户端Qt开发——开发环境
    一、QT开发环境1.安装三个部分①C++编译器(gcc,cl.exe……)②QTSDKSDK-->软件开发工具包比如,windows版本QTSDK里已经内置了C++的编译器(内置编译器是mingw,windows版本的gcc/g++)③QT的集成开发环境(IDE)官方提供的QTCreator最容易入门,最容易上手的方式,开箱即用,虽然QTCrea......
  • C++ 入门基础:开启编程之旅
    引言C++是一种高效、灵活且功能强大的编程语言,广泛应用于系统软件、游戏开发、嵌入式系统、科学计算等多个领域。作为C语言的扩展,C++不仅继承了C语言的过程化编程特性,还增加了面向对象编程(OOP)的支持,使得代码更加模块化、易于管理和复用。本文将带你走进C++的世界,从......