将指针分配给字符串对象的第一个和最后一个索引

Posted

技术标签:

【中文标题】将指针分配给字符串对象的第一个和最后一个索引【英文标题】:Assigning Pointers to the first and last indexes of an String Object 【发布时间】:2017-03-07 15:35:31 【问题描述】:

我正在尝试编写一个函数,该函数接受用户提交的字符串并创建两个指针;一个指向字符串的第一个索引,一个指向字符串的最后一个索引。当我尝试将指针设置为等于特定索引firstPointer = userString[0]; secondPointer = userString[userString.length() - 1]; 时出现错误。我收到的错误出现在= 运算符上,并显示“无法将 char 类型的值分配给 char 类型的实体”。

我已经阅读了有关 *** 的其他几篇文章,但我认为他们没有解决相同的问题,或者我不理解他们的建议是合理的。我对 C++ 很陌生,对指针也很陌生。当我意识到我的指针分配引发错误时,您可以忽略我刚刚设置的 for 循环。请在下面找到函数代码:

功能

void ReverseString(string &userString)


    char *firstPointer;
    char *secondPointer;

    firstPointer = new char;
    secondPointer = new char;

    firstPointer = userString[0];
    secondPointer = userString[userString.length() - 1];

    //Iterate over entire string
    for (int loopCounter = 0; loopCounter < userString.length()/2; loopCounter++)
    

    


【问题讨论】:

firstPointer = new char; 这些行有什么目的? 初始化应该是secondPointer = &amp;userString[userString.length() - 1]; 见std::basic_string::operator[]。 哦!这解决了它,但为什么呢?我很困惑,我以为您必须先初始化指针,然后使用新的“类型”将它们设置在其他地方? @StormsEdge 如果将指针指向内存中的现有点,则无需为指针分配内存 【参考方案1】:

我收到的错误出现在 = 运算符上,并说 “char 类型的值不能分配给 char 类型的实体”。

我不相信你。我准备赌一大笔钱,它实际上说: "char 类型的值不能分配给 char * 类型的实体"

尾随的 * 非常重要。 firstPointer 不是 char,它是“指向 char 的指针”,或者正如我们这里所说的“char*”。

userString[0] 另一方面, char(或更准确地说,是对char 的引用)。它是对索引 0 处字符串中字符的引用。如果您想要指向该 char 的指针,则需要获取其地址。所以&amp;userString[0]。所以你的代码可能是:

    firstPointer = &userString[0];
    secondPointer = &userString[userString.length() - 1];

或者,获取第一个和最后一个元素非常常见,因此有特定的函数,因此您可以编写:

    firstPointer = &userString.front();
    secondPointer = &userString.back();

最后,所有都取决于实际上 存在第一个和最后一个字符 - 所以你应该真正开始:

    if (userString.empty()) return;

确保有。

【讨论】:

【参考方案2】:

试试这个:

void ReverseString(string &userString)


    char *firstPointer;
    char *secondPointer;

    firstPointer = &userString[0];
    secondPointer = &userString[userString.length() - 1];

    .....


您的问题是您的 userString 不是指针。指针就像实际对象的地址。所以这样做:firstPointer = userString[0]; 就像在某人询问您的地址时将您的房子给了他们。但是您可以通过使用&amp; 运算符来获取“地址”,例如firstPointer = &amp;userString[0];

在这种情况下,您也不需要使用new。如果您希望指针指向在该点之前不存在的东西,您可以编写类似firstPointer = new char; 的东西,有效地创建一个新的char 并指向它。但是,由于userString 已经存在,因此无需创建新的。

【讨论】:

纯代码答案几乎没有用处。除非您解释问题是什么,以及您提出的解决方案如何解决该问题,否则它不会很有帮助。 @IInspectable - 好建议,我相应地编辑了我的答案。谢谢。

以上是关于将指针分配给字符串对象的第一个和最后一个索引的主要内容,如果未能解决你的问题,请参考以下文章

将第一个节点添加到hashmap中的链表时,为啥必须将新节点直接分配给索引指针?

将二维指针数组中的字符串分配给一维指针数组

为啥允许将字符串文字分配给 C++ 中 char * 类型的指针 [重复]

C中的结构和指针(将字符串分配给结构)

如何将二维数组的一维分配给一个指针。

如何在一个已经在python中保存整数值的索引处将字符分配给字符串?