Besoin d'aide : programme en C++

Résolu
Anna -  
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour! Je suis débutante en C++ et j'aurais une question pour un programme utilisant une telle fonction, voici l'énoncé : Écrire une fonction dont le prototype est int majusculation (char chaine []) . Cette fonction prend une chaîne de caractères en paramètre et retourne un entier. La fonction majusculation () remplace toutes les lettres minuscules dans chaine par des lettres majusucles et retourne le nombre de caractères remplacés.
Voici ce que j'ai fait jusqu'à date, mais il me manque le compteur de caractères remplacés (en plus je ne suis pas sûre de ce que j'ai fait...) :
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int majusculisation (char) ;

main () {

char T[100] ;
int i ;
int DIM = 100 ;


cout << "Entrer une chaine de caractere\n" ;
for (i=0 ; i<DIM ; i++) {
cin >> T[i] ;
}

for (i=0 ; i<DIM ; i++) {
cout << "Voici la chaine de caracteres que vous avez entre : \n" << T[i] << endl;
}

majusculisation (T) ;
cout << "Votre chaine transformee en majusucles devient : " << T << endl ;

cout << "Le nombre de caracteres remplaces est : " << endl;

return 0 ;
}


int majusculisation (char T[]) {

int i ;
int DIM ;

for (i=0 ; i<DIM ; i++) {
if (T[i] >= 97 && T[i] <= 122) {
T[i] = T[i] - 32 ;
}}

}

return T ;
}



Merci beaucoup!

3 réponses

kiruasam Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   3
 
Voici deja ce que je changerais dans ta fonction :
int majusculisation (char T[]) {

int i ;
int DIM=100 ;
int cpt=0;

for (i=0 ; i<DIM ; i++) {
if (T[i] >= 97 && T[i] <= 122) {
T[i] = T[i] - 32 ;
cpt++;
}
}

return cpt;
}


cpt est le compteur de caractères et c'est lui que ta fonction doit renvoyer et non pas T qui est ta chaine de caractère.

Après il faut peut-etre aussi caster tes caractères (char) en entier (int) pour que tes tests de comparaisons fonctionnent :
atoi(T[i]) au lieu de T[i]

Voila ce que je peux te dire pour l'instant, je n'ai pas le temps de tester, tiens nous au courant !

0
Anna
 
Merci beaucoup de m'avoir aidé pour le programme!!!
0
kiruasam Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   3
 
Si en fait j'ai eu le temps ^^
Y'avait une idée de cast mais pas celle que j'ai mis en fait (voir ci-dessous)

Voila ce que ça donne en C (j'ai testé et approuvé) :

#include <stdio.h>
#include <string.h>

int majusculisation (char T[]) {

int i ;
int cpt=0;

for (i=0 ; i<strlen(T) ; i++) {
if (T[i] >= 97 && T[i] <= 122) {
T[i] = char (int(T[i]) - 32);
cpt++;
}
}

return cpt;
}


int main () {

char T[100];
int cpt;

printf("Entrer une chaine de caractere : \n") ;
scanf("%s", &T);

printf("Voici la chaine de caracteres que vous avez entre : %s\n",T);

cpt = majusculisation (T);
printf("Votre chaine transformee en majusucles devient : %s\n",T);

printf("Le nombre de caracteres remplace est : %d\n",cpt);

return 0 ;
}

Normalement ça doit etre (plus ou moins?) la meme chose en C++ !!!
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Deux petites remarques :
- il est mieux d'utiliser la fonction toupper (tolower pour la minusculasition)
- le scanf ne conservera que le premier mot si on tape une phrase.

#include <stdio.h>
#include <string.h>

unsigned int majusculisation (char T[]) {
    unsigned int i ;
    unsigned int cpt=0;
    char newc;

    for (i=0 ; i<strlen(T) ; i++) {
        newc=toupper(T[i]);
        if (newc!=T[i]) {
            T[i] = newc;
            cpt++;
        }
    }
    return cpt;
}


int main () {

    char T[100];
    int cpt;

    strcpy(T,"J'AiMe LeS tApIrS");
    printf("Votre chaine avant transformation est : %s\n",T);
    cpt = majusculisation (T);
    printf("Votre chaine transformee en majusucles devient : %s\n",T);
    printf("Le nombre de caracteres remplace est : %d\n",cpt);

    return 0 ;
}

Bonne chance
0