Utilisez std::string::find
et std::string::substr
:
int main()
{
std::string line;
std::vector<std::string> parts;
while (std::getline(std::cin, line))
{
auto suffix = line.find(".dat");
if (suffix != std::string::npos && suffix >= 2)
{
std::string part = line.substr(suffix-2, 2);
parts.push_back(part);
}
}
for (auto & s : parts)
std::cout << s << '\n';
return 0;
}
Ouput pour votre entrée:
$ ./a.out < inp
45
06
12
50
Ou, si vous êtes absolument sûr chaque ligne est bien formé, vous pouvez remplacer l'intérieur la boucle avec:
std::string part = line.substr(line.size()-6, 2);
parts.push_back(part);
(Non recommandé).
Modifier: J'ai remarqué que vous avez changé les critères de la question, voici donc la boucle de remplacement pour les nouveaux critères:
auto bpos = line.find_last_of('b');
if (bpos != std::string::npos && line.size() >= bpos+2)
{
std::string part = line.substr(bpos+1, 2);
parts.push_back(part);
}
noter que toutes ces variations ont la même sortie.
Vous pouvez chuck un isdigit
là-dedans pour faire bonne mesure aussi.
modifier final: Ceci est la version complète bpos
, c++98
compatible:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::string line;
std::vector<std::string> parts;
// Read all available lines.
while (std::getline(std::cin, line))
{
// Find the last 'b' in the line.
std::string::size_type bpos = line.find_last_of('b');
// Make sure the line is reasonable
// (has a 'b' and at least 2 characters after)
if (bpos != std::string::npos && line.size() >= bpos+2)
{
// Get the 2 characters after the 'b', as a std::string.
std::string part = line.substr(bpos+1, 2);
// Push that onto the vector.
parts.push_back(part);
}
}
// This just prints out the vector for the example,
// you can safely ignore it.
std::vector<std::string>::const_iterator it = parts.begin();
for (; it != parts.end(); ++it)
std::cout << *it << '\n';
return 0;
}
Voulez-vous extraire deux chiffres à partir d'un nom de fichier, ou voulez-vous visualiser un vecteur de vecteurs? – juanchopanza
vecteur de vecteurs était une vieille question! cette question concerne le nom de fichier .... @juanchopanza – learner
désolé !! oublié le titre !! @juanchopanza – learner