0
votes

Quel serait le cas de base de la fonction récursive qui devrait trouver une somme de nombres dans une chaîne

Par exemple, INT NUM (Char [100]) est une fonction qui trouve la somme des nombres dans une chaîne.

E.g. "123Anewamou7" devrait revenir 130 .

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.

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.

Quel conseil pourriez-vous donner pour trouver le cas de base?


4 commentaires

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


3 Réponses :


0
votes

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.


0 commentaires

0
votes

Vous pouvez utiliser SSCANF. Je crois que la boucle serait meilleure, mais voici une version récursive. XXX


0 commentaires

0
votes

Le boîtier de base de la fonction récursive est la condition * 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.

Il suffit de ne déclarer qu'un seul paramètre de la fonction du type const char * code>. Et le type de retour doit être long long int code>. Cela réduit le risque de débordement. P>

La fonction peut être basée sur l'utilisation de la fonction C strtoll code>. P>

voici un programme de démonstration. 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;
}


1 commentaires

Il suffit de déclarer qu'un seul paramètre : 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.