Par exemple, E.g. "123Anewamou7" devrait revenir 130 em>. p>
J'ai essayé de le faire itérativement et il semble que j'avais une poignée sur elle. Mais j'ai aussi curieux de savoir comment on le ferait de manière récursive. Bien que je ne puissiez même pas avoir trouvé un cas de base pour une fonction récursive. p>
Ma première hypothèse est que je vérifierai tous les personnages de la chaîne comme je l'ai fait dans l'affaire itérative. p>
Quel conseil pourriez-vous donner pour trouver le cas de base? p>
3 Réponses :
Vous pouvez vérifier la chaîne à gauche, je veux dire, s'il n'y a que des chiffres que vous êtes dans le boîtier de base et que vous venez de retourner ce numéro. P>
Vous pouvez utiliser SSCANF. Je crois que la boucle serait meilleure, mais voici une version récursive.
Le boîtier de base de la fonction récursive est la condition Il suffit de ne déclarer qu'un seul paramètre de la fonction du type La fonction peut être basée sur l'utilisation de la fonction C voici un programme de démonstration. P > * s == '\ 0' code> où
s code> est la chaîne passée à la fonction. C'est à ce moment que la terminaison zéro de la chaîne est rencontrée.
const char * code>. Et le type de retour doit être
long long int code>. Cela réduit le risque de débordement. P>
strtoll code>. P>
long long int sum( const char *s )
{
long long int value = 0;
if ( *s )
{
if ( ( '0' <= *s && *s <= '9' ) || *s == '+' || *s == '-' )
{
char *p;
value = ( strtoll( s, &p, 10 ) );
s = p;
}
else
{
++s;
}
value += sum( s );
}
return value;
}
Il suffit de déclarer qu'un seul paramètre i>: le code est plus propre, mais de cette manière, le compilateur ne peut pas optimiser à l'aide de la récursion de la queue.
Le cas de base est quand il n'y a plus rien à résumer, donc une chaîne sans chiffres, non?
@Moehm donc quand le personnage rencontre un non-chiffre, je retournerai le numéro trouvé et, sinon, je viens de retourner la somme?
N ° quand il n'y a pas de chiffre dans la chaîne, renvoyez zéro. Sinon, renvoyez la valeur du premier numéro plus la somme de la chaîne de la chaîne après ce numéro.
Ideone.com/wqnr07