【问题标题】:In c++, how can I grab the next few characters from a string?在 C++ 中,如何从字符串中获取接下来的几个字符?
【发布时间】:2017-01-20 11:10:32
【问题描述】:

我的目标是获取一个非常大的数字的特定部分并将该部分与另一个数字连接,然后继续。由于整数只有这么高,我有一个数字字符串。我不知道这个数字可能是什么,所以我无法自己输入。我可以在第一部分使用 substr,但不久之后我就卡住了。

一个例子

“435509590420924949”

我想取出前 5 个字符,转换为整数,对它们进行自己的计算,然后将它们与字符串的其余部分连接起来。所以我会取出 43550,做公式得到 49,然后将 49 添加到原始字符串“95904”之后的另一个 5,所以新答案将是“4995904”。

这是我编写的第一部分的代码,

string temp;
int number;

temp = data.substr(0, 5);
number = atoi(temp.c_str());

这会抓取字符串中的第一个字符,转换为可以计算的整数,但我不知道如何抓取长字符串的下 5 个字符。

【问题讨论】:

  • 我认为您需要的是字符串的size()length() 函数,它们是同义词。然后你就可以知道还剩下多少个字符。更多信息请访问link
  • 无论你运行什么魔法算法,都不会一次只对一个数字起作用,不是吗?
  • 你知道你可以做data.substr(5,5) 对吗? (在我们得到复杂的答案之前)
  • 如果您使用过一次data.substr(),是什么阻止您再次使用它?
  • 哦,哇,我觉得自己像个白痴。我一直告诉自己 substr 是 (first pos, last pos) 不是 (first pos, # of char)。

标签: c++ string integer concatenation


【解决方案1】:

你可以得到字符串的长度,比如:

std::size_t startIndex = 0;
std::size_t blockLength = 5;
std::size_t length = data.length();
while(startIndex < length)
{
    std::string temp = data.substr(startIndex, blockLength);
    // do something with temp
    startIndex += blockLength;
    // TODO: this will skip the last "block" if it is < blockLength,
    // so you need to modify it a bit for this case.
}

【讨论】:

    【解决方案2】:

    您可以使用循环。例如:

    std::size_t subStrSize = 5;
    for (std::size_t k = 0; k < data.size(); k+=subStrSize) {
        std::size_t h = std::min(k + subStrSize - 1, data.size() - 1);
        int number = 0;
        for (std::size_t l = k; l <= h; ++l) 
            number = number * 10 + data[l] - '0';
        //-- Some work with number --
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      相关资源
      最近更新 更多