【问题标题】:How can I get a character from a string pointer in C++?如何从 C++ 中的字符串指针中获取字符?
【发布时间】:2019-09-07 12:35:25
【问题描述】:

我将一个std::string 指针传递给一个函数,我想使用这个指针来访问和修改这个字符串中的字符。

目前,我唯一能做的就是使用* 运算符打印我的字符串,但我不能只访问一个字符。我尝试使用*word[i]*(word + i),其中word 是我的指针,iunsigned int

现在我有这个。

#include <iostream>

void shuffle(std::string* word);

int main(int argc, char *argv[])
{
    std::string word, guess;

    std::cout << "Word: ";
    std::cin >> word;

    shuffle(&word);
}

void shuffle(std::string* word)
{
    for (unsigned int i(0); i < word->length(); ++i) {
        std::cout << *word << std::endl;
    }
}

假设我输入了单词溢出,我想要得到以下输出:

Word: Overflow
O
v
e
r
f
l
o
w

我对 C++ 很陌生,而且我的母语不是英语,所以请原谅我的错误。谢谢。

【问题讨论】:

  • 为什么要使用指针将word参数传递给函数?
  • @πάνταῥεῖ 这个函数稍后会修改字符串。
  • 然后只使用参考。没有必要为此使用指针。
  • 直接回答您的问题:(*word)[i](*word) 取消引用指针,返回一个字符串变量。 [i] 返回字符串中的字符。

标签: c++ string pointers pass-by-reference


【解决方案1】:

你知道你有一个对象,通过引用传递它。然后像往常一样访问该对象。

    shuffle(word);
}

void shuffle(std::string& word) // Not adding const as I suppose you want to change the string
{
    for (unsigned int i = 0; i < word.size(); ++i) {
        std::cout << word[i] << std::endl;
    }
}

【讨论】:

  • 除了声明中使用的字符有什么区别?
  • 引用允许您像使用堆栈上的普通实例一样使用该实例。不需要指针语法。它本质上“隐藏”了你的指针。
  • @OneManMonkeySquad 除此之外,还有其他理由使用引用而不是指针吗?为什么这是推荐的方法?
  • 因为你知道你有一个“唯一”的字符串(你不能重新分配引用),而一个指针可能是nullptr 或改变。
  • @o2640110 你的问题倒过来了。您应该问“为什么要使用指针?”我知道的唯一原因是允许通过nullptr。请注意,在大多数情况下,函数接受 nullptr 是没有意义的(你的甚至没有检查,会导致未定义的行为)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2022-01-09
  • 2020-09-03
相关资源
最近更新 更多