- Non è possibile modificare una stringa con un'altra più lunga "in-place". È quindi sempre necessario avere un input e output separati in operazioni come queste.
- Le classi stringa sono raramente ottimizzate per operazioni come questa. In C++ sarebbe meglio fare uso di stringstream. In Python esistono classi simili come StringIO.
- Se si desidera che questo strumento funzioni correttamente è necessario considerare alcune situazioni particolari. Prima di tutto se il dollaro è preceduto da '\' allora va ignorato. TeX supporta poi anche '\$\$' per indicare una formula in una riga indipendente. Scopro ora che in realtà non è ufficialmente supportato in LaTeX ma ho l'impressione abbia sempre funzionato lo stesso. Almeno in teoria è poi necessario assicurarsi che il paragrafo non finisca all'interno dell'ambiente matematico perché indicherebbe un file LaTeX non corretto. Ovviamente non ha importanza se si tratta di un esercizio.
In Python puoi scrivere qualcosa del genere (non l'ho testato):
- Codice:
from io import StringIO
def latex2e_fy(s):
output = StringIO()
met_dollar = False
# Iterate over the string an write the desired output to the StringIO object
for c in s:
if c != '$':
output.write(c)
else:
output.write(r'\)' if met_dollar else r'\(')
met_dollar = not met_dollar
if met_dollar:
# There is an odd number of dollars
# You may want to handle an invalid input differently but I am lazy here
return None
result = output.getvalue()
output.close()
return result
Puoi scrivere anche meno codice di così (usando accumulate/reduce e join per esempio) ma ho cercato di renderlo leggibile. In C++ il codice sarebbe abbastanza simile.