10

我有一个 C++ string。我需要将此字符串传递给接受char*参数的函数(例如 - strchr())。

a)我如何获得该指针?

b)是否有一些等效的功能strschr()适用于C++ strings

4

8 回答 8

20
  1. 获取对象使用 函数的C字符串等价物。C++ stringc_str
  2. 定位对象中第一次出现的 charastring使用 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*.

于 2010-04-25T11:17:51.117 回答
6

令人惊讶的是,std:;string 的功能远远超过 C 风格的字符串。您可能需要find_first_of()方法。一般来说,如果您发现自己在 C++ std::strings 上使用 strxxx() 函数,那么您几乎可以肯定做错了什么。

像许多 C++ 标准库一样,字符串类是一个复杂的野兽。为了充分利用它,你真的需要一本好的参考书。我推荐Nicolai Josuttis的 The C++ Standard Library

于 2010-04-25T11:19:18.277 回答
4

你不能char*从一个string

string不允许您自由访问其内部缓冲区。如果您希望它以空值终止或不必以空值终止,那么您可以获得的最接近的是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';

绝对不行。

于 2010-04-25T11:40:49.497 回答
0

如果 str 在您的字符串中使用str.c_str()方法来获取其中的 char* 。

于 2010-04-25T11:17:04.903 回答
0

如果您只想为 pw 分配一个字符串文字,您可以这样做

char *pw = "Hello world";

如果你有一个C++ std::string object,你想分配给pw的值,你可以这样做

char *pw = some_string.c_str()

但是,pw 指向的值仅在 some_string 的生命周期内有效。

更多信息:
如何在 C++ 中将字符串分配给 char *pw

祝你好运!!

于 2010-04-25T11:19:39.290 回答
0
std::string yourString("just an example");
char* charPtr = new char[yourString.size()+1];
strcpy(charPtr, yourString.c_str());
于 2010-04-25T11:45:53.260 回答
0

也许这个例子会帮助你

#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;
}
于 2010-04-25T12:34:14.670 回答
0

C++ 标准提供了两个 std::basic_string 类的成员函数,它们返回指向字符串第一个元素的指针。它们是c_str()data()。但是两者都返回 const char *,因此您不能将它们与具有 char * 类型参数的函数一起使用。

至于函数 strchr 那么它的第一个参数是const char *. 所以你可以在这个函数中使用 c_str() 和 data()。但是,最好使用find()类 sttd::basic_string 的成员函数而不是strchr.

于 2013-12-31T12:25:06.753 回答