查找字符串是否包含字符串并操纵附加的数字

时间:2014-04-12 20:58:17

标签: c++ string find std root

作为输入的一部分,用户输入nrt:x告诉程序计算x的第n个根。如果我想将n和x发送到另一个方法以简化第n个根,我想我可以使用std :: string :: find来查找“rt:”。如果find返回true,那么我需要将n和x发送到另一个方法,但是在找到“rt:”后我怎么能这样做呢?例如,用户输入7rt:3。对于“rt:”,查找将返回true,那么我怎么能将3和7发送到另一个方法?

if(std::string::find(rt:)) {
    //manipulate numbers before/after rt: from user input
    if(result will be an int) {
        nthRoot(double n, double x);
    }
    If(result will not be an int) {
        nthRootSimplify(double n, double x);
    }
}
void nthRoot(double x, double n){
    double nthRootSol = pow(x, double(1 / n));
}

编辑:代码我已经在你的帮助下写成了解决方案。任何建议都会很棒。如果“n”或“z”长于1 int,我发现自己会遇到问题。

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

}
}

int main()  {
    findNthRoot("2 - 1+3rt:4");

    return 0;
}

输出是: 7 6 10 3 4 最重要的是“3”和“4”是str1和str2的值

2 个答案:

答案 0 :(得分:1)

如果您假设输入始终以n开头并以激进下的数字结尾,则可以使用std::string::front()访问第一个元素,使用std::string::back()访问最后一个元素。

答案 1 :(得分:1)

find 会返回true。这样的find将是非常无用的。真实std::string::find返回找到的字符串的位置

知道这个位置,你现在可以将你的字符串分成&#34;之前&#34; &#34;&#34;&#34;&#34;部分使用std::string::substr