Как преобразовать символ* указатель в строку C++?

У меня есть C++ string. Я должен передать эту строку функции, принимающей a char* параметр (например - strchr()).

a) Как я получаю тот указатель?

b) Есть ли некоторый функциональный эквивалент strschr() это работает на C++ strings?

10
задан Eagle-Eye 14 June 2015 в 03:39
поделиться

7 ответов

  1. Чтобы получить строковый эквивалент C объекта объекта C ++ string , используйте функцию c_str .
  2. Чтобы найти первое появление символа char в объекте строка , используйте функцию find_first_of .

Пример:

string s = "abc";

// call to strlen expects char *
cout<<strlen(s.c_str());  // prints 3

// on failure find_first_of return string::npos
if(s.find_first_of('a') != string::npos)
    cout<<s<<" has an a"<<endl;
else
    cout<<s<<" has no a"<<endl;

Примечание: я привел strlen просто пример функции, которая принимает char * .

20
ответ дан 3 December 2019 в 15:05
поделиться
std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());
0
ответ дан 3 December 2019 в 15:05
поделиться

Удивительно, но std:; string имеет гораздо больше возможностей, чем строки в стиле C. Возможно, вам понадобится метод find_first_of () . В общем, если вы обнаружите, что используете функции strxxx () в C ++ std :: strings, вы почти наверняка делаете что-то не так.

Как и большая часть стандартной библиотеки C ++, строковый класс представляет собой сложный зверь. Чтобы извлечь из этого максимум пользы, вам действительно понадобится хороший справочник. Я рекомендую Стандартную библиотеку C ++ Николая Йосаттиса.

6
ответ дан 3 December 2019 в 15:05
поделиться

Если вы просто хотите присвоить строковый литерал pw, вы можете сделать это как

char *pw = "Hello world";

Если у вас есть C ++ std :: string объект , значение которого вы хотите присвоить pw , вы можете сделать это как

char * pw = some_string.c_str ()

Однако значение, на которое указывает pw будет действителен только в течение времени жизни some_string.

Подробнее здесь:
Как присвоить строку char * pw в C ++

GoodLUCK !!

0
ответ дан 3 December 2019 в 15:05
поделиться

Возможно, этот пример вам поможет

#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("Replace the vowels in this sentence by asterisks.");
  size_t found;

  found=str.find_first_of("aeiou");
  while (found!=string::npos)
  {
    str[found]='*';
    found=str.find_first_of("aeiou",found+1);
  }

  cout << str << endl;

  return 0;
}
0
ответ дан 3 December 2019 в 15:05
поделиться

Вы не может получить char * из строки

строка не позволяет вам получить свободный доступ к своему внутреннему буферу. Ближайшее, что вы можете получить, это const char * с использованием .c_str () , если вы хотите, чтобы он завершался нулем, или .data () , если он не должен завершаться нулем.

Затем вы можете преобразовать указатель, возвращаемый этими функциями, в char * , но вы делаете это на свой страх и риск. При этом это относительно безопасное приведение при условии, что вы не меняете строку. Если вы его изменили, то указатель, полученный от c_str () , может стать недействительным.

Этот код:

string str("Hello World!");
char* sp = (char*)str.c_str();
sp[5] = 'K';

, вероятно, подходит
Однако этот:

string str("Hello World!");
char* sp = (char*)str.c_str();
str = "Chaged string";
sp[5] = 'K';

определенно не подходит.

4
ответ дан 3 December 2019 в 15:05
поделиться

Если str в вашей строке, используйте метод str.c_str () , чтобы поместить в нее символ *.

0
ответ дан 3 December 2019 в 15:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: