2017-08-13 2 views
1

J'essaie de compter les espaces ' ' au début d'une ligne à partir d'un fichier stocké dans une chaîne. Le problème est que je ne sais pas comment dire à std::getline() de s'arrêter quand trouver un caractère distinct de ' '.Utilisez n'importe quel caractère comme délimiteur sur std :: getline()

std::getline(file_input, string_target, 'Any_character_except_space'); 
+0

Vous êtes probablement en train d'aborder ce problème. Un marteau auquel je pourrais penser est 'std :: regex'. – user0042

+0

'std :: getline' ne le fera pas. Écrivez votre propre fonction en lisant un caractère à la fois jusqu'à ce que vous trouviez un personnage correspondant à vos critères. –

+0

Vous pouvez rechercher un * espace * et compter le nombre de fois que 'std :: getline (f, s, '');' lit une chaîne vide. – Galik

Répondre

1

Vous ne pouvez pas utiliser tout caractère sauf espace comme séparateur pour std::getline(), aucune des signatures permet donc.

Ce que vous pouvez faire est par exemple:

std::string line; 
std::getline(file_input,line); 
auto pos = std::find_if_not(std::begin(line),std::end(line),[](char c) { 
     return std::isspace(c); 
    // or c == ' ' 
    // or whatever condition you need 
    }); 
size_t space_count = std::distance(std::begin(line),pos); 

est ici un full example.

+1

Pourquoi le conditionnel? Si 'pos == std :: end (line)', alors la chaîne est entièrement espaces, et 'std :: distance (std :: begin (ligne), pos)' retournera la longueur de la chaîne, qui est aussi le nombre d'espaces au début de la chaîne, dans ce cas. –

+1

@Benjamin Semble que tu as raison. J'avais une logique légèrement différente à l'esprit. – user0042