2017-08-14 2 views
-2

je veux faire quelque chose comme ça:façon intelligente pour obtenir un certain nombre de caractères de la ligne la plus longue de ostringstream

std::ostringstream os; 
writingSomeDataToStream(os); 
const size_t width = getNumberOfCharsInLongestLine(os); 
const auto header = generateHeader("My diagnostic data", width); 
showText(header); 
showText(os.str()); 

Comment écrire la fonction getNumberOfCharsInLongestLine être aussi rapide que possible?

+0

optimale de quelle façon? Le code * le plus simple * serait d'appeler à plusieurs reprises 'getline' et de noter la longueur de chaque ligne, en sauvegardant la plus grande valeur. –

+1

Vous pourriez sous-classer 'std :: ostringstream' et compter les longueurs de ligne comme il est écrit peut-être? – Galik

+0

std :: getline a besoin de l'istream, donc je ne peux pas l'utiliser. – Marcin

Répondre

0

Ma résolution est:

size_t getNumberOfCharsInLongestLine(const std::string& str) 
{ 
    size_t longest = 0; 
    size_t counter = 0; 
    for (auto c : str) 
    { 
     if (c == '\n') 
     { 
      if (counter > longest) 
       longest = counter; 
      counter = 0; 
     } 
     else 
      ++counter; 
    } 
    return longest; 
}