将指针指定给String对象的第一个和最后一个索引

时间:2017-03-07 15:35:32

标签: c++ string pointers

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

我已经阅读了有关stackoverflow的其他几篇文章,我不认为他们正在解决相同的问题,或者说它似乎是合理的我不明白他们的问题是什么。重新推荐。我对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++)
    {

    }

}

2 个答案:

答案 0 :(得分:1)

  

我收到的错误出现在=运营商上,并说明了   &#34; char类型的值不能分配给char&#34;。

类型的实体

我不相信你。我准备下注实际上说的一笔很重要的金额:
&#34; char类型的值无法分配给char * &#34;

类型的实体

这种追踪*非常重要。 firstPointer不是char,它是指向char&#34;的指针,或者我们倾向于在这里说&#34; a char* &#34;

另一方面,

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

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

或者,获取第一个和最后一个元素是如此常见,以至于有特定的功能,所以你可以写:

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

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

    if (userString.empty()) return;

确保有。

答案 1 :(得分:-1)

试试这个:

void ReverseString(string &userString)
{

    char *firstPointer;
    char *secondPointer;

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

    .....

}

您的问题是您的userString不是指针。指针就像实际对象的地址。所以这样做:firstPointer = userString[0];就像在他们要求你的地址时给别人一样。但您可以使用&运算符获取“地址”,例如firstPointer = &userString[0];

在这种情况下,您也不需要使用new。如果你希望你的指针指向那个不存在的东西,你会写firstPointer = new char;之类的东西,有效地创建一个新的char并指向它。但是,由于userString已经存在,因此无需创建新的node(const node& other) { node* prev = nullptr; node* cur = this; const node* old_cur = &other; for (;;) { cur->count = old_cur->count; cur->min = old_cur->min; cur->max = old_cur->max; cur->prev = prev; if (old_cur->next) { old_cur = old_cur->next; cur->next = new node(); prev = cur; cur = cur->next; } else { cur->next = nullptr; break; } } }