что-то смутно подобное, я просто не уверен, как использовать строковые функции c ++ на ... указателе символа?
Ты не можешь. Не напрямую. Если вы хотите работать со строками в стиле char*
, вы должны использовать функции из заголовка <cstring>
. Но есть несколько деталей, которые нужно отслеживать, если вы используете эти функции, поэтому я не рекомендовал бы это вообще.
Я понимаю, что в C ++ эта строка является просто массивом символов,
Это утверждение почти верно. std::string
предназначен для замены char*
строк, и поэтому он может делать все, что угодно char*
, а затем и некоторые. std::string
имеет, по крайней мере, char*
, который указывает на буфер, длину его буфера и вторую длину того, сколько этого буфера было использовано. Есть хороший шанс, что у него также есть меньший буфер внутри самого объекта («оптимизация небольших строк»), и приличный шанс, что у него есть какой-то счетчик ссылок (Стандарт написан, чтобы сделать «копирование при записи» легальной реализацией). и многие реализации используют это преимущество, , хотя это может быть неправильным подходом ).
Если вы хотите использовать 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
, поэтому я не могу сказать, что мой подход обязательно лучше.