【任务6.15】字符串操作
字符串的3种操作
在字符串处理中,常常需要实现取子串、插入、删除这3种操作。问题描述如下:
(1) 取子串操作: 输入字符串、起始位置、子串长度,输出子串的内容。
(2) 插入操作: 输入源字符串、目标字符串、指定位置,把源字符串插入到目标字符串的指定位置,并输出插入后的目标字符串。
(3) 删除操作: 输入字符串、待删除子串的起始位置和长度,从字符串中删除待删除子串,并输出删除后的字符串。
程序运行时应先给出一个菜单,由使用者输入想进行的操作及实现该项操作所需的参数。输入完毕后,由程序给出操作后的结果。
//************************************************
//* Source Name: ChapterSix_JobFifteen.cpp
//* Founction : String operations
//* Author : Skyera
//* Create Time : 2025-7-27
//* Modify :
//* Modify Time:
//************************************************
#include <iostream>
#include <string>
using namespace std;
// 取子串操作
string substrOperation(const string &str, int start, int length)
{// 检查起始位置是否有效if(start < 0 || start >= str.length()){return "错误,起始位置无效";}// 检查长度是否有效,若长度超过剩余字符则只取到末尾if(length < 0){return "错误,长度不能为负数";}int actualLength = min(length, (int)str.length() - start);return str.substr(start, actualLength);
}
// 插入操作
string insertOperation(const string &source, const string &target, int pos)
{// 检查插入位置是否有效if(pos < 0 || pos > source.length()){return "错误,插入位置无效";}string result = target;return result.insert(pos, source);
}
// 删除操作
string deleteOperation(const string &str, int start, int length)
{// 检查起始位置是否有效if(start < 0 || start >= str.length()){return "错误,起始位置无效";}// 检查长度是否有效if(length <= 0) {return "错误,长度必须为正数";}// 计算实际删除的长度,防止超出字符串范围int actualLength = min(length, (int)str.length() - start);string result = str;return result.erase(start, actualLength);
}
// 显示菜单
void showMenu()
{cout << "\n============字符串操作菜单====================" << endl;cout << "1. 取子串操作" << endl;cout << "2. 插入操作" << endl;cout << "3. 删除操作" << endl;cout << "4. 退出程序" << endl;cout << "================================================" << endl;cout << "请选择操作(1~4): ";
}
int main()
{int choice;do{showMenu();cin >> choice;cin.ignore(); // 忽略输入缓冲区中的换行符switch(choice){case 1:{string str;int start, length;cout << "\n------取子串操作--------" << endl;cout << "请输入原始字符串: ";getline(cin, str);cout << "请输入起始位置: ";cin >> start;cout << "请输入子串长度: ";cin >> length;string result = substrOperation(str, start, length); cout << "取子串结果: " << result << endl;break;}case 2:{string source, target;int pos;cout << "\n--------插入操作-------------" << endl;cout << "请输入源字符串(要插入的字符串): ";getline(cin, source);cout << "请输入目标字符串(被插入的字符串):v";getline(cin, target);cout << "请输入插入的位置: ";cin >> pos;string result = insertOperation(source, target, pos);cout << "插入后结果: " << result << endl;break;}case 3:{string str;int start, length;cout << "\n---------删除操作----------------" << endl;cout << "请输入原始字符串: ";getline(cin, str);cout << "请输入待删除子串的起始位置: ";cin >> start;cout << "请输入待删除子串的长度: ";cin >> length;string result = deleteOperation(str, start, length);cout << "删除后结果: " << result << endl;break;}case 4:{cout << "程序已退出,谢谢使用" << endl;break;}case 5:{cout << "无效的输入,请重新输入" << endl;}}}while(choice != 4);return 0;
}