在c++中,移除字符串中的尾随零
时间: 2024-02-13 21:04:34 浏览: 138
在 C++ 中移除字符串中的尾随零可以通过以下方式实现:
1. 找到字符串中最后一个非零字符的位置。
2. 使用 substr() 函数截取字符串的前 n 个字符,其中 n 为最后一个非零字符的位置加 1。
3. 返回截取后的字符串。
下面是一个示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
string removeTrailingZeros(string str) {
int i = str.length() - 1;
while (i >= 0 && str[i] == '0') {
i--;
}
return str.substr(0, i + 1);
}
int main() {
string str = "12300";
cout << removeTrailingZeros(str) << endl; // 输出 "123"
return 0;
}
```
注意,这段代码中使用了 substr() 函数,该函数可以从一个字符串中截取一部分作为新的字符串。substr() 函数的第一个参数是截取的起始位置,第二个参数是截取的长度。在这里,起始位置是 0,长度是最后一个非零字符的位置加 1。
相关问题
本关任务: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 测试说明 平台会对你编写的代码进行测试:
本关任务要求你编写一个程序,判断一个给定的非空字符串 `s` 是否可以通过重新排列其字符并插入空格,形成由字典 `wordDict` 中单词组成的序列。这意味着你需要检查 `s` 的所有可能子串是否都在 `wordDict` 中出现过,并且可以用这些单词拼接成 `s`。
以下是解决问题的一些关键点:
1. **遍历字符串**:从左到右遍历字符串 `s`,对于每个位置,尝试找出以该位置为分隔点的子串。
2. **子串查找**:对于每个子串,将其去除前导和尾随的空格后,检查它是否在 `wordDict` 中存在。
3. **回溯**:如果找到一个子串不在字典中,则回溯到上一个位置继续尝试其他分割点。
4. **重复使用单词**:因为题目提到可以重复使用字典中的单词,所以要确保不会因为某个单词被使用而误判。
5. **处理空格**:插入空格外,还需要考虑如何在子串之间添加适当的空格,这通常可以通过记录空格的位置来完成。
6. **结果判断**:如果所有的子串都可以在字典中找到对应的单词,则返回 `true`;否则返回 `false`。
以下是一个简单的 C++ 解决方案示例:
```cpp
#include <vector>
#include <string>
using namespace std;
bool exist(string s, vector<string>& wordDict) {
// 将字符串变为小写并移除前导和尾随空格
string target = s.substr(0, s.find_last_not_of(' ')).lower();
// 分割函数,用于查找字典中的单词
bool check(vector<string>& dict, int start, int end) {
if (start == end) return true;
for (int i = start; i <= end; ++i) {
string subStr = target.substr(start, i - start + 1).lower();
if (find(dict.begin(), dict.end(), subStr) != dict.end()) {
if (check(dict, i + 1, end)) return true;
}
}
return false;
}
// 检查原始字符串是否可以分解
return check(wordDict, 0, target.size() - 1);
}
```
阅读全文