创建具有不同数量的字符的子字符串

时间:2014-04-12 23:59:13

标签: string c++11

void findNthRoot(string x) {
  if(x.find("rt:") != string::npos) {
    unsigned position = x.find("rt:");
    double n = position - 1;
    double z = position + 3;
    string str1 = x.substr(n, 1);
    string str2 = x.substr(z, 1);     
  }
}

int main() {
  findNthRoot("2 - 1 + 32rt:43 - 89");
}

作为计算器程序的一部分,用户可以输入nrt:x来表示数字x的第n个根。我上面编写的代码完全正常,但只有当用户输入一个带有单个数字n和一个数字x的根时。所以我的子串str1和str2在这种情况下分别为2和4。我需要子串来取整个数字跟随rt:和rt:之前的整数。我无法弄清楚如何做到这一点。我知道这是因为我在x.substr(n,1)中有1个,但由于用户可以输入他们想要的任何数字,我需要以某种方式能够解释它。

1 个答案:

答案 0 :(得分:1)

<cctype>标题中,您可以使用函数std::isdigit()来告诉您字符是否为数字。

通过这种方式,您可以通过简单的循环找到子字符串的长度:

void findNthRoot(string x)
{
    size_t position = x.find("rt:");
    if (position != string::npos)
    {       
        size_t length = 1;
        size_t n = position - 1;
        while (n > 0 && std::isdigit(x[n - 1]))
        {
            --n;
            ++length;
        }
        string str1 = x.substr(n, length);

        length = 1;
        size_t z = position + 3;
        while (z < x.size() - 1 && std::isdigit(x[z + length]))
            ++length;
        string str2 = x.substr(z, length); 
    }
}

int main()
{
    findNthRoot("2 - 1 + 32rt:43 - 89");
}