c++ string删除首字母
时间: 2023-10-21 16:04:44 浏览: 113
要删除C++字符串(std::string)的第一个字符,你可以使用erase()函数。erase()函数接受一个位置参数,该参数指定要删除字符的位置。在这种情况下,你可以使用索引0来指定字符串的第一个字符。以下是一个示例代码:
```cpp
#include <iostream>
#include <string>
int main() {
std::string s = "hello";
s.erase(0, 1); // 删除第一个字符
std::cout << s << std::endl; // 输出 "ello"
return 0;
}
```
在这个例子中,我们使用erase()函数来删除字符串的第一个字符。erase()函数的第一个参数是要删除字符的位置,第二个参数是要删除的字符数。由于我们只想删除一个字符,所以第二个参数为1。最后,我们使用cout打印出修改后的字符串。
所以,要删除C++字符串的第一个字符,你可以使用`s.erase(0, 1)`。
相关问题
c++ string 删除头部字母
### C++ 中去除字符串头部字符的方法
在 C++ 中,可以通过多种方式来移除字符串开头的特定字符。以下是几种常见方法:
#### 方法一:使用 `erase` 函数
可以直接调用 `std::string` 的成员函数 `erase()` 来删除指定位置上的字符。
```cpp
#include <iostream>
#include <string>
int main() {
std::string str = "abc123";
// 删除前三个字符 'a', 'b', 'c'
size_t pos = 0;
while (pos < str.length() && isalpha(str[pos])) {
++pos;
}
str.erase(0, pos);
std::cout << str << std::endl;
return 0;
}
```
这段代码会遍历字符串直到遇到第一个非字母字符为止,并通过 `erase()` 移除这些字母[^1]。
#### 方法二:利用迭代器配合算法库中的 find_if_not
可以借助 `<algorithm>` 头文件里的工具简化逻辑处理过程。
```cpp
#include <iostream>
#include <string>
#include <algorithm>
int main(){
std::string str = "xyz789";
auto it = std::find_if_not(str.begin(), str.end(), ::isalpha);
str.erase(str.begin(), it);
std::cout << str << std::endl;
return 0;
}
```
此段程序同样实现了相同的功能——找到首个不是字母的位置并截断前面的部分。
这两种方案都可以有效地解决需求,在实际开发过程中可以根据个人喜好选择合适的方式实现功能。
c++string相关函数
### C++ `string` 类常用成员函数及其用法
#### 构造函数
可以创建不同类型的字符串对象。例如,可以通过给定的字符序列初始化一个字符串[^1]。
```cpp
#include <iostream>
#include <string>
int main() {
std::string str("Hello, world!");
std::cout << str;
}
```
#### 访问单个字符
通过 `operator[]` 或者 `at()` 方法来获取或设置特定位置上的字符。需要注意的是,`operator[]` 不会做越界检查而 `at()` 会在索引超出范围时报错[^2]。
```cpp
std::string str = "example";
char ch1 = str[0]; // 使用 [] 获取第一个字符 e
str.at(0) = 'E'; // 修改首字母为大写 E
// 尝试访问不存在的位置将会抛出异常 out_of_range
try {
char invalidChar = str.at(str.size());
} catch(const std::out_of_range& ex){
std::cerr << "Error: " << ex.what();
}
```
#### 遍历字符串
利用迭代器遍历整个字符串中的每一个字符。对于只读场景可选用 `const_iterator`;如果需要修改,则应采用默认形式的迭代器[^3]。
```cpp
for(auto iter=str.begin();iter!=str.end();++iter){
std::cout<<*iter<<" ";
}
// 对于 const 字符串使用 const_iterator
const std::string cStr="immutable";
for(auto cit=cStr.cbegin();cit!=cStr.cend();++cit){
std::cout<<*cit<<" ";
}
```
#### 查询长度和容量
- `size()` 和 `length()` 返回当前存储的有效字符数;
- `capacity()` 表示已分配但未使用的空间大小;
- 当前占用的最大可能字节数由 `max_size()` 提供;
- 调整实际内容尺寸可通过调用 `resize(newSize)` 实现,这可能会增加或减少现有数据量;
- 若要预留更多内存以便后续增长更高效,应该调用 `reserve(minimumCapacity)` 函数[^4]。
```cpp
std::string text{"a short phrase"};
std::cout<<"\nOriginal size:"<<text.size()<<", capacity:"<<text.capacity();
if(text.capacity()<expectedMaxLen){
text.reserve(expectedMaxLen);
}
text.resize(8,'.');
std::cout<<"\nAfter resize:size="<<text.size()<<", new content is '"<<text<<"'";
```
#### 子串提取与拼接
支持多种方式截取子串以及连接多个字符串片段:
- `substr(pos,n)`:从指定起始点复制 n 个连续字符形成新的独立副本;
- `+=` 操作符用于追加另一个字符串到原字符串后面;
- `append(s,pos,len)` 同样实现附加功能但是允许自定义源区间;
- `push_back(c)` 添加单一字符至末端。
```cpp
std::string greeting {"Good morning!"};
greeting+=" Have a nice day!";
auto part=greeting.substr(greeting.find('!')+2);
std::string message{};
message.append(part).push_back('.');
std::cout<<"\nThe final message reads:\n"<<message;
```
#### 查找模式匹配
提供了一系列方法帮助定位某个子串首次/最后一次出现的位置:
- `find(sub[,pos])`: 寻找最左端相等部分并返回其偏移地址;
- `rfind(sub[,pos])`: 找到最后一次匹配处所在坐标;
- 若找不到则均返回 `npos` 值表示失败状态。
```cpp
std::string sentence {"The quick brown fox jumps over the lazy dog."};
if(sentence.find("quick")!=std::string::npos){
auto idx=sentence.rfind("the");
std::cout<<"\nWord 'the' last appears at index "<<idx;
}else{
std::cout<<"\nPattern not found.";
}
```
#### 替换删除替换转换
能够方便地执行插入、覆盖、擦除等编辑动作,并且还具备将内部缓冲区转储成常规C风格零终止字符串的能力。
```cpp
sentence.replace(sentence.find("fox"),3,"cat");
// 移除某些元素
sentence.erase(sentence.find_last_not_of('.',sentence.length()-1)+1);
// 输出作为传统 null 终止字符串
puts(sentence.c_str());
// 复制固定数量的字符到外部数组
char buffer[6];
sentence.copy(buffer,sizeof(buffer)-1,7); //-1留位'\0'
buffer[sizeof(buffer)-1]='\0';
printf("\ncopied substring:\"%s\"",buffer);
```
阅读全文
相关推荐













