gpt4 book ai didi

c++ - 无法在C++ for循环中获取两个变量进行更新

转载 作者:行者123 更新时间:2023-12-01 15:12:59 24 4
gpt4 key购买 nike

我正在创建一个将句子分解为单词的函数,并且相信做到这一点的方法是使用str.substr,从str[0]开始,然后使用str.find查找第一个" "字符的索引。然后将str.find的起始位置参数更新为从该" "字符的索引开始,直到str.length()的结尾。

我使用两个变量来标记单词的开始位置和结束位置,并用最后一个的结束位置更新开始位置变量。但是它没有像我目前所希望的那样在循环中进行更新,因此无法弄清原因。

#include <iostream>
#include <string>
using namespace std;
void splitInWords(string str);



int main() {
string testString("This is a test string");
splitInWords(testString);

return 0;
}



void splitInWords(string str) {
int i;
int beginWord, endWord, tempWord;
string wordDelim = " ";
string testWord;

beginWord = 0;
for (i = 0; i < str.length(); i += 1) {
endWord = str.find(wordDelim, beginWord);
testWord = str.substr(beginWord, endWord);
beginWord = endWord;

cout << testWord << " ";
}
}

最佳答案

几个问题:

  • substr()方法的第二个参数是长度(不是位置)。
    // Here you are using `endWord` which is a poisition in the string.
    // This only works when beginWord is 0
    // for all other values you are providing an incorrect len.
    testWord = str.substr(beginWord, endWord);
  • find()方法从第二个参数中搜索。
    // If str[beginWord] contains one of the delimiter characters
    // Then it will return beginWord
    // i.e. you are not moving forward.
    endWord = str.find(wordDelim, beginWord);

    // So you end up stuck on the first space.
  • 假设您已解决上述问题。您将在每个单词的前面添加空格。
    // You need to actively search and remove the spaces
    // before reading the words.

  • 您可以做的好事:

    这里:
    void splitInWords(string str) {

    您正在按值传递参数。这意味着您正在复制。更好的技术是通过const引用传递(您不修改原始文件或副本)。
    void splitInWords(string const& str) {

    替代

    您可以使用流功能。
    void split(std::istream& stream)
    {
    std::string word;
    stream >> word; // This drops leading space.
    // Then reads characters into `word`
    // until a "white space" character is
    // found.
    // Note: it emptys words before adding any
    }

    关于c++ - 无法在C++ for循环中获取两个变量进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62013608/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com