10

私は C++ を持っていますstring。この文字列を、char*パラメーターを受け入れる関数 (たとえば - strchr()) に渡す必要があります。

a) そのポインターを取得するにはどうすればよいですか?

b) に相当する機能はありstrschr()ますC++ stringsか?

4

8 に答える 8

20
  1. オブジェクトCに相当する文字列を取得するには、 関数を使用します。C++ stringc_str
  2. オブジェクト内で最初に出現する a を見つけるには、関数を使用 charします 。stringfind_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*aから a を取得することはできませんstring

string内部バッファへのアクセスを解放することはできません。null で終了する場合、または null で終了する必要がない場合、取得できる最も近いのはconst char*usingです。.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
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

文字列内の str の場合、str.c_str()method を使用してその中の 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

おそらく、この例はあなたを助けるでしょう

#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 の 2 つのメンバー関数を提供します。c_str()とですdata()。ただし、どちらも const char * を返すため、char * 型のパラメーターを持つ関数では使用できません。

関数 strchr に関しては、その最初のパラメータはconst char *です。したがって、この関数で c_str() と data() を使用できます。find()ただし、代わりにクラス sttd::basic_string のメンバー関数を使用する方がはるかに優れています。strchr.

于 2013-12-31T12:25:06.753 に答える