String 创建具有不同字符数的子字符串
作为计算器程序的一部分,用户可以输入nrt:x来表示数字x的第n个根。我上面写的代码工作得非常好,但是只有当用户输入一个带有一位数n和一位数x的根时。因此,在本例中,我的子字符串str1和str2分别是2和4。我需要子字符串取rt:后面的整数和rt:前面的整数。我不知道怎么做。我知道这是因为我在x.substr(n,1)中有1,但由于用户可以输入他们想要的任何数字,我需要以某种方式能够解释这一点。在String 创建具有不同字符数的子字符串,string,c++11,String,C++11,作为计算器程序的一部分,用户可以输入nrt:x来表示数字x的第n个根。我上面写的代码工作得非常好,但是只有当用户输入一个带有一位数n和一位数x的根时。因此,在本例中,我的子字符串str1和str2分别是2和4。我需要子字符串取rt:后面的整数和rt:前面的整数。我不知道怎么做。我知道这是因为我在x.substr(n,1)中有1,但由于用户可以输入他们想要的任何数字,我需要以某种方式能够解释这一点。在标题中,您有一个函数,告诉您字符是否是数字 这样,您就可以通过一个简单的循环找到子字符串的长度:
标题中,您有一个函数,告诉您字符是否是数字
这样,您就可以通过一个简单的循环找到子字符串的长度:
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");
}
void findNthRoot(字符串x)
{
大小\u t位置=x.find(“rt:”);
if(位置!=字符串::npos)
{
尺寸/长度=1;
尺寸n=位置-1;
而(n>0&&std::isdigit(x[n-1]))
{
--n;
++长度;
}
字符串str1=x.substr(n,长度);
长度=1;
尺寸=位置+3;
而(z
哇,太棒了,谢谢你。我现在正在查看你给我的代码来调整它,但是在测试str2时是正确的——不管我在rt之后写了什么:我得到了那个数字。然而,在rt:之前,我得到的是3。是的,这是因为我忘记了更新循环中的length
值。几秒钟后查看我的编辑。好的,很好,谢谢你的帮助。现在您已经帮助我到达这里,我需要将值传递给另一个方法。从这里,我需要将它们从字符串转换为int。这可以通过sstream来完成。正确吗?正确。类似于istringstream-iss(str);int i;iss>>i;返回i代码>或者如果您使用的是C++11,您可以使用。是的,我使用的是C++11。那么stoi是一个将字符串转换为整数的std函数?或者它还有其他用途吗
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");
}