Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 创建具有不同字符数的子字符串_String_C++11 - Fatal编程技术网

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

String 创建具有不同字符数的子字符串,string,c++11,String,C++11,作为计算器程序的一部分,用户可以输入nrt:x来表示数字x的第n个根。我上面写的代码工作得非常好,但是只有当用户输入一个带有一位数n和一位数x的根时。因此,在本例中,我的子字符串str1和str2分别是2和4。我需要子字符串取rt:后面的整数和rt:前面的整数。我不知道怎么做。我知道这是因为我在x.substr(n,1)中有1,但由于用户可以输入他们想要的任何数字,我需要以某种方式能够解释这一点。在标题中,您有一个函数,告诉您字符是否是数字 这样,您就可以通过一个简单的循环找到子字符串的长度:

作为计算器程序的一部分,用户可以输入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");
}