Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
63 views
in Technique[技术] by (71.8m points)

C++ get substring from each axis in a string

How can i acquire the value from each axis on a string?

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string text = "X:-600.913 Y:100.54 Z:412.22";
    //do stuff
    string X; // must be -600.913
    string Y; // must be 100.54
    string Z; // must be 412.22
    //print individual values
    std::cout << X;
    std::cout << Y;
    std::cout << Z;
}

my previous attempt was

int main()
{
    string text = "X:-600.913 Y:100.54 Z:412.22";
    cin >> text;
    int Xsecond = text.find(" Y:");
    string X = text.substr(2, Xsecond - 4);
    int Yfirst = text.find("Y:");
    int Ysecond = text.find(" Z:");
    string Y = text.substr(Yfirst + 1, Ysecond-Yfirst - 1);
    cout << X;
}

which was too fuzzy and complicated and did not work at all. Any help would be appreciated!

question from:https://stackoverflow.com/questions/65646041/c-get-substring-from-each-axis-in-a-string

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

As mentioned in the comments, regular expressions work well for this kind of thing. Use the module regex. Like so:

#include <iostream>
#include <cstdlib>
#include <regex>

int main()
{
    const std::string s = "X:-600.913 Y:100.54 Z:412.22"; 
    std::smatch m;
    std::regex e(R"(X:(-?d+.d+)sY:(-?d+.d+)sZ:(-?d+.d+))");
 
    if (std::regex_search(s, m, e))
        std::cout << "X:" << m[1] << " Y:" << m[2] << " Z:" << m[3] << std::endl;
}
X:-600.913 Y:100.54 Z:412.22

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...