délimitée Comment puis-je obtenir:chaîne Parse
connect
100
username
example
de cette chaîne:
ngg://connect>100/username>example/
délimitée Comment puis-je obtenir:chaîne Parse
connect
100
username
example
de cette chaîne:
ngg://connect>100/username>example/
Ajout d'une réponse avec strtok
à cause de la diversité:
char str[] = "ngg://connect>100/username>example/";
char *s = strtok(str, ">/");
std::vector<std::string> tokens;
while (s = strtok(NULL, ">/"))
tokens.push_back(std::string(s));
Ceci partagera la chaîne str
dans les jetons désirés (jeter la première ngg:
, comme dans la question). Voici un code working example de ce code.
En utilisant std::string::find
avec des arguments "/"
et ">"
et std::string::substr
avec les indices trouvés.
C'est un bon début.
ngg://connect>100/username>example/
Si ce format est fixe, vous pouvez utiliser std::sscanf
comme:
#include <iostream>
#include <cstdio>
int main()
{
char const *input = "ngg://connect>100/username>example/";
char const *input_format = "ngg://%[^>]>%d/%[^>]>%[^/]";
char connect[100], user[100], str[100]; //assuming max size is 100
int num;
if (std::sscanf(input, input_format, connect, &num, user, str) != 4)
{
std::cerr<<"error - number of tokens read must be equal to 4";
return 0;
}
std::cout << connect <<std::endl;
std::cout << num <<std::endl;
std::cout << user <<std::endl;
std::cout << str <<std::endl;
}
sortie (online demo):
connect
100
username
example
Une possibilité est boost::split()
:
#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/split.hpp>
int main()
{
std::vector<std::string> tokens;
std::string s("ngg://connect>100/username>example/");
boost::split(tokens, s, boost::is_any_of("/>"));
// "connect" == tokens[2]
// "100" == tokens[3]
// "username" == tokens[4]
// "example" == tokens[5]
return 0;
}
+1 pour l'utilisation correcte de la famille evil scanf. – EvilTeach