如何更改字符串指针指向的字符

How can I change the character a string pointer points to?

本文关键字:字符 指针 何更改 字符串      更新时间:2023-10-16

理论上很简单:

如果我有一个字符串animal="Boar"

如何将动物指向'O'

我试过这个:

int main(int argc, char** argv) {
    string *spoint = new string;
    string word = "Hello";
    spoint = &word;
    spoint++;
    cout << (*spoint);
    return 0;
}

但它不起作用。

我希望cout << word;首先打印"Word",如果这是单词指向的字符串,那么运行一个操作,所以cout << word;将打印"ord"

一定有一个简单的方法?

我认为您缺少一些基本的指针算术。让我们来看下面的代码片段:

 int* spoint;
 spoint++;

如果spoint指向地址为1000int,则在上述操作之后,spoint将指向当前位置旁边的位置sizeof(int)字节,因为下一个int将在1000 + sizeof(int)可用。此操作将指针移动到下一个存储器位置1004(如果int的大小为4字节),而不影响存储器位置的实际值。

字符串也是如此。

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

spoint++之后,spoint将指向"world",而不是指向"Hello"的字符e,这就是为什么您没有正确的输出。如果你想访问字符串中的字符,你应该使用其他人提到的char*

首先,您必须将word转换为C字符串(一个以null结尾的字符序列),同时将其分配给char*,然后您可以递增它来访问这些字符。

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

现在,spoint在递增后将指向"word"'o',如果您将使用cout打印它,则输出将为"ord"

我觉得您混淆了char *和C++string对象。

通过使用两者,你可以实现与你所要求的类似的东西——尽管我不确定这是否是你真正想要的

int main(int argc, char** argv) {
    string word = "Hello";
    const char* spoint = word.c_str()
    spoint++;
    cout << (*spoint);
    return 0;
}