Maison >développement back-end >C++ >Comment insérer efficacement des espaces avant les lettres majuscules dans une chaîne ?

Comment insérer efficacement des espaces avant les lettres majuscules dans une chaîne ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-29 21:21:15807parcourir

How to Efficiently Insert Spaces Before Uppercase Letters in a String?

Insertion d'espaces dans les transitions de casse

L'objectif est de transformer une chaîne comme "ThisStringHasNoSpacesButItDoesHaveCapitals" en "Cette chaîne n'a pas d'espaces mais elle en a Avoir des majuscules" en introduisant des espaces précédant les majuscules caractères.

Approche Regex

Les expressions régulières peuvent en effet être utilisées à cette fin. L'expression régulière "[A-Z]" identifie les lettres majuscules et "$0" ajoute un espace avant chaque correspondance :

System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " <pre class="brush:php;toolbar:false">string AddSpacesToSentence(string text, bool preserveAcronyms)
{
  if (string.IsNullOrWhiteSpace(text))
     return string.Empty;
  StringBuilder newText = new StringBuilder(text.Length * 2);
  newText.Append(text[0]);
  for (int i = 1; i < text.Length; i++)
  {
    if (char.IsUpper(text[i]))
      if ((text[i - 1] != ' ' && !char.IsUpper(text[i - 1])) ||
          (preserveAcronyms && char.IsUpper(text[i - 1]) &&
           i < text.Length - 1 && !char.IsUpper(text[i + 1])))
        newText.Append(' ');
    newText.Append(text[i]);
  }
  return newText.ToString();
}
")

Cependant, les expressions régulières peuvent être coûteuses en termes de calcul et moins lisibles pour les modèles complexes.

Approche itérative

Une approche alternative consiste à parcourir le caractère de chaîne en caractère :

Cette fonction vérifie la transition entre les caractères minuscules et majuscules, en gérant éventuellement les acronymes.

Comparaison des performances

En termes de performances , l'approche itérative surpasse considérablement l'approche regex, démontrant une réduction de 92,4 % du temps d'exécution pour une chaîne avec 1 000 lettres majuscules consécutives. Il troque la simplicité du code contre la rapidité.

En fin de compte, le choix entre ces approches dépend des exigences spécifiques de performances et de lisibilité de chaque projet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn