题目描述:
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() 函数,在字符串中指定位置插入新的内容。这些函数在处理字符串时非常有用,特别是需要动态构建或修改字符串内容时。