2016-04-04 27 views
0

理論的には十分に単純です:文字列ポインタが指す文字を変更するにはどうすればよいですか?

私は文字列動物= "Boar"を持っていれば、

どのように動物を'O'に向けることができますか?

int main(int argc, char** argv) { 

    string *spoint = new string; 
    string word = "Hello"; 
    spoint = &word; 
    spoint++; 
    cout << (*spoint); 

    return 0; 
} 

をそして、それは動作しません:

私はこれを試してみました。

私は、その後の操作を実行するために、文字列の単語のポイントなのでcout << word;"ord"を印刷する場合は、"Word"を印刷するcout << word;が最初にしたいです。

簡単な方法が必要ですか?

+0

spoint ++はどうしたと思いましたか? – BugFinder

+0

[c_str](http://en.cppreference.com/w/cpp/string/basic_string/c_str)メカニズムを使用したいことがありますか? – MariusSiuram

+1

脇に:あなたはそこにメモリリークがあります。文字列を割り当てた後、ポインタを失うため、メモリを解放することは不可能になります。 – MariusSiuram

答えて

2

をしたい私はあなたには、いくつかの基本的なポインタ演算が欠けていると思うであることを確認していない--althoughあなたが求めているものに似た何かを達成することができ、両方使用することにより

。次いで、上記操作後、spointは次intするので、現在位置の次の位置にsizeof(int)バイトを指します、アドレス1000あるint

int* spoint; 
spoint++; 

spoint場合ポイント:次のコードを取ることができ1000 + sizeof(int)で利用可能です。この操作では、メモリ位置の実際の値に影響を与えることなく、ポインタを次のメモリ位置1004intのサイズが4バイトの場合)に移動します。

同じ場合が弦にあります。

string word[] = {"Hello","world"}; 
string* spoint = word; 
spoint++; 

spoint++spointはあなたがchar*を使用する必要がありますが、文字列内の文字にアクセスしたいoutput.If右しなかった理由がある、ない"Hello"の文字e"world"を指すようになります他の人が述べたように。

まず、char*に割り当てる一方で、あなたは文字にアクセスするには、それをインクリメントすることができ、C-文字列(文字のnullで終わるシーケンス)にwordを変換する必要があります。

string word = "word"; 
const char *spoint = word.c_str(); 
spoint++; 
cout <<spoint<<endl; 

spointは、インクリメント後"word"'o'を指すようになります、そしてあなたがcoutを使用してそれを印刷する場合は、出力は"ord"になります。

+0

恐ろしい、感謝Rajeev。私はあなたをアップアップするのに十分な担当者がいませんが、それは答えです。ありがとう! –

+0

ああ、そうです!私はそれを見ます、ありがとう、私は持っています。 :-) –

1

char *とC++ stringのオブジェクトを混同しているような気がします。あなたは、私は、これはあなたが本当に

int main(int argc, char** argv) { 

    string word = "Hello"; 
    const char* spoint = word.c_str() 
    spoint++; 
    cout << (*spoint); 

    return 0; 
} 
関連する問題