J'essaie de comparer deux chaînes pour déterminer si elles varient uniquement dans un sous-ensemble numérique de la structure de chaîne; par exemple,C++ chaîne diff (à la difflib de Python)
varies_in_single_number_field('foo7bar', 'foo123bar')
# Returns True, because 7 != 123, and there's only one varying
# number region between the two strings.
En Python je peux utiliser le difflib
pour accomplir ceci:
import difflib, doctest
def varies_in_single_number_field(str1, str2):
"""
A typical use case is as follows:
>>> varies_in_single_number_field('foo7bar00', 'foo123bar00')
True
Numerical variation in two dimensions is no good:
>>> varies_in_single_number_field('foo7bar00', 'foo123bar01')
False
Varying in a nonexistent field is okay:
>>> varies_in_single_number_field('foobar00', 'foo123bar00')
True
Identical strings don't *vary* in any number field:
>>> varies_in_single_number_field('foobar00', 'foobar00')
False
"""
in_differing_substring = False
passed_differing_substring = False # There should be only one.
differ = difflib.Differ()
for letter_diff in differ.compare(str1, str2):
letter = letter_diff[2:]
if letter_diff.startswith(('-', '+')):
if passed_differing_substring: # Already saw a varying field.
return False
in_differing_substring = True
if not letter.isdigit(): return False # Non-digit diff character.
elif in_differing_substring: # Diff character not found - end of diff.
in_differing_substring = False
passed_differing_substring = True
return passed_differing_substring # No variation if no diff was passed.
if __name__ == '__main__': doctest.testmod()
Mais je ne sais pas comment trouver quelque chose comme difflib
C++. Des approches alternatives bienvenues. :)
Je veux juste clarifier, est-ce que les lettres comptent ou seulement les chiffres? Il me semble que vous voulez pour chaque paire de séries de nombres, vous voulez seulement sur la paire pour avoir des différences? –
Tous les caractères doivent être identiques à l'autre "numéro de chaîne" qui doit varier numériquement. Est-ce que ça fait plus de sens? – cdleary
Donc, fondamentalement, vous cherchez A1 * B1 == A2B2 où * est une séquence de chiffres? –