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个,但由于用户可以输入他们想要的任何数字,我需要以某种方式能够解释它。
答案 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");
}