说我有一个指向char array
的指针,就像程序中的样本一样:
string input = "bo1b";
char* = &input;
然后我想摆脱那个1
我使用了一个循环,例如
while(i<strlen(input))
{
if (!isalpha(input[i]))
{
input.erase(i,1) <------?
}
像这样的东西
我只是不确定如何在c ...指针上使用c ++字符串函数?
我确实理解在c ++中,一个字符串只是一个字符串数组,但确切的用法和仍未通过我的字符串。
答案 0 :(得分:3)
某些东西,我只是不确定如何使用c ++字符串函数......一个字符指针?
你做不到。不是直接的。如果要对char*
- 样式字符串进行操作,则必须使用<cstring>
标题中的函数。但是有几个细节可以跟踪你是否使用这些功能,所以我不建议这样做。
我确实理解在c ++中字符串只是一个char数组,
这种说法几乎是正确的。 std::string
旨在替换char*
字符串,因此它可以执行char*
之后的所有操作。 std::string
至少有char*
指向缓冲区,缓冲区的长度,以及该缓冲区使用了多少的第二长度。它很可能在对象本身内部有一个较小的缓冲区(“小字符串优化”),并且它有一定的机会它有某种引用计数(标准是为了使“写入时复制”成为合法的实现,许多实现都利用了这一点,although that may not be the right approach)。
如果您想使用std::string
方法,则需要std::string
,这很容易制作:
std::string foo(input);
while (i < foo.size()) {
if (!std::isalpha(foo[i])) {
foo.erase(i, 1);
}
}
就个人而言,我会写(在C ++ 0x中):
std::string foo("hello 123");
auto itor = std::remove_if(foo.begin(),
foo.end(),
[](char c){ return !std::isalpha(c); });
foo.erase(itor, foo.end());
或者:
std::string foo;
std::copy_if(input,
input + strlen(input),
std::back_inserter(foo),
std::isalpha);
// foo now contains what you were looking for
很多人更喜欢使用std::string
方法,所以我不能说我的方法必然更好。
答案 1 :(得分:1)
将c样式字符串转换为std::string
,如下所示:
std::string stringToEdit( cString );
// The constructor of a std::string can take a char* (c-style string)
现在,您可以使用standard C++ string functions来操纵此字符串,例如erase,就像您尝试在代码段中进行操作一样。
答案 2 :(得分:0)
如果您不想转换为CString,也可以使用std:string函数,请参阅以下链接: