删除字符C++最后一次出现时字符数组的开头
Removing start of char array at last occurrence of a character C++
我正在寻找删除字符串开头直到最后一个字符出现的最佳方法。例如我有一个包含以下内容的字符数组:
[Microsoft][ODBC SQL Server Driver][SQL Server]选项"enable_debug_ports"要求值为0或1。
基本上,我在寻找"]"的最后一次出现。我希望我的字符数组被修剪为:
选项"enable_debug_ports"要求值为0或1。
我已经找到了几种方法来处理字符串数据类型。我想知道是否有一种有效的方法来操作char数组。我的程序需要几个参数是char[]而不是字符串。在我的情况下,我该如何使用类似strcpy
的东西?
如果您的字符串包含']'字符,则以下内容应该有效:
std::string trimIt(originalCStr);
std::string trimmed(trimIt.substr(trimIt.find_last_of("]")));
strcpy(originalCStr, trimmed.c_str());
对于纯C方法:
char *toPtr = originalCStr;
char *fromPtr = strchr(toPtr, ']');
++fromPtr;
while (*fromPtr != ' ') {
*toPtr = *fromPtr;
++fromPtr;
++toPtr;
}
*toPtr = ' ';
您可以使用strrchr查找最后一次出现的']',然后使用memcpy剪切您的char[],如图所示
无论出于何种原因,如果您坚持不使用std::string
,仍然有一种使用标准算法的纯C++方法,这些算法可以很好地处理原始数组。以下是C++14(它使用std::rbegin
和std::rend
),但如果需要,您可以使用std::reverse_iterator
手动将其调整为C++11:
#include <algorithm>
#include <iostream>
template <class InputRange, class OutputIterator, class Value>
void CopyFrom(InputRange const& input, OutputIterator output_iter, Value const& value)
{
using std::rbegin;
using std::rend;
using std::end;
auto const iter_last = std::find(rbegin(input), rend(input), value);
std::copy(iter_last.base(), end(input), output_iter);
}
int main()
{
char const src[] = "[Microsoft][ODBC SQL Server Driver][SQL Server]Option 'enable_debug_reports' requires a value of 0 or 1.";
char * dst = new char[sizeof(src) + 1](); // just for this toy program
CopyFrom(src, dst, ']');
std::cout << dst;
delete[] dst;
}
请注意,此解决方案假设您需要将子字符串作为副本,并且不会对不包含指定值的输入进行错误检查。
当然,您可能更适合切换到std::string
,并对任何C API使用c_str()
。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?