Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

aide c++

7 réponses
Avatar
hbvfof
Bonjour, je souhaite écrire à l'envers une phrase. Aucune erreur lors
de la compilation g++ windows. Le programme ne marche pas.voila le
source :

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

main()
{
char phrase[100];
int taille ;
char a ;

printf("Entrer la phrase à inverser.\n");
gets(phrase) ;
taille = strlen (phrase) ;
for (int i=taille ;i<1;i--) {
if (i==taille) continue ; //pour éviter le caractere de fin de
ligne
printf("%s",phrase[i]) ;
//putchar (phrase[i]) ;


}
// a = getchar;

return 0;
}

7 réponses

Avatar
Fred
Bonjour, je souhaite écrire à l'envers une phrase. Aucune erreur lors
de la compilation g++ windows. Le programme ne marche pas.voila le
source :

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

main()
{
char phrase[100];
int taille ;
char a ;

printf("Entrer la phrase à inverser.n");
gets(phrase) ;
taille = strlen (phrase) ;
for (int i=taille ;i<1;i--) {
if (i==taille) continue ; //pour éviter le caractere de fin de
ligne
printf("%s",phrase[i]) ;
//putchar (phrase[i]) ;


}
// a = getchar;

return 0;
}


Salut,

J'ai modifié le programme de la façon suivante :
(voir la boucle for ainsi que printf("%c",...) au lieu
de printf("%s",...).

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

main()
{
char phrase[100];
int taille ;
char a ;

printf("Entrer la phrase à inverser.n");
gets(phrase) ;
taille = strlen (phrase) ;
for (int i=taille ; i>=0; i--) {
if (i==taille) continue ; //pour éviter le caractere de fin de ligne

printf("%c",phrase[i]) ;
//putchar (phrase[i]) ;


}
getchar();

return 0;
}

Dans la boucle for j'ai mis i>=0 car la seconde expression d'une
boucle for signifie "tant que".

Esope reste ici et se repose
esoper es te ici etser eposE




--
Fred40

http://cerbermail.com/?7WWAvXv1hV

Avatar
Greg
On 10 Jan 2005 09:52:36 -0800
(totof) wrote:

Bonjour, je souhaite écrire à l'envers une phrase. Aucune erreur lors
de la compilation g++ windows. Le programme ne marche pas.voila le
source :


[snip]

Proposition dans un style plus "C++" (ou le jeu des 42 différences) :

#include <iostream>
#include <string>

int main(void)
{
std::string input;

std::cout << "Entrez la phrase à inverser : ";
getline(std::cin, input);

std::string::const_iterator start = input.begin();
std::string::const_iterator end = input.end();

for(; end != start; end--)
std::cout << *(end-1);
std::cout << std::endl;

return EXIT_SUCCESS;
}

Conseil de débutant : n'hésite pas à abuser de la STL, ça simplifie énormément
la programmation, jette aux orties les entrées/sorties de style 'C', et t u feras
des programmes qui passeront mieux ici :)

Greg

Avatar
Sylvain Togni
#include <iostream>
#include <string>

int main(void)
{
std::string input;

std::cout << "Entrez la phrase à inverser : ";
getline(std::cin, input);

std::string::const_iterator start = input.begin();
std::string::const_iterator end = input.end();

for(; end != start; end--)
std::cout << *(end-1);
std::cout << std::endl;

return EXIT_SUCCESS;
}

Conseil de débutant : n'hésite pas à abuser de la STL, ça simplifie énormément
la programmation, jette aux orties les entrées/sorties de style 'C', et tu feras
des programmes qui passeront mieux ici :)


Tant qu'à utiliser la STL, autant l'utiliser jusqu'au bout ;-)

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
std::string input;
std::cout << "Entrez la phrase à inverser : ";
std::getline(std::cin, input);
std::reverse(input.begin(), input.end());
std::cout << input << std::endl;
}

--
Sylvain

Avatar
drkm
Sylvain Togni writes:

int main()
{
std::string input;
std::cout << "Entrez la phrase à inverser : ";


Je mettrais un « << std::flush » ici, non ?

std::getline(std::cin, input);
std::reverse(input.begin(), input.end());
std::cout << input << std::endl;
}


--drkm

Avatar
Gabriel Dos Reis
drkm writes:

| Sylvain Togni writes:
|
| > int main()
| > {
| > std::string input;
| > std::cout << "Entrez la phrase à inverser : ";
|
| Je mettrais un « << std::flush » ici, non ?

C'est que les programmeurs C sont morallement obligés de faire.
En C++, les flux std::cout et std::cin sont synchronisés ( « tie() »).


|
| > std::getline(std::cin, input);
| > std::reverse(input.begin(), input.end());
| > std::cout << input << std::endl;
| > }
|
| --drkm

--
Gabriel Dos Reis

Avatar
kanze
Sylvain Togni wrote:

[...]
Conseil de débutant : n'hésite pas à abuser de la STL, ça
simplifie énormément la programmation, jette aux orties les
entrées/sorties de style 'C', et tu feras des programmes qui
passeront mieux ici :)


Tant qu'à utiliser la STL, autant l'utiliser jusqu'au bout ;-)

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
std::string input;
std::cout << "Entrez la phrase à inverser : ";
std::getline(std::cin, input);
std::reverse(input.begin(), input.end());
std::cout << input << std::endl;
}


Plus proche à son code original (qui sortait la chaîne à
l'inverse sans le modifier -- pas que je crois que ça fasse une
différence ici) :

int
main()
{
std::cout << "Entrez la ligne à inverser : " ;
std::string line ;
if ( ! std::getline( std::cin, line ) ) {
// ??? traitement d'erreur...
} else {
std::copy( line.rbegin(), line.rend(),
std::streambuf_iterator<char>( std::cout ) ) ;
}
return EXIT_SUCCESS ;
}

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Jean-Noël Mégoz
"totof" a écrit dans le message de
news:
taille = strlen (phrase) ;
for (int i=taille ;i<1;i--) {
if (i==taille) continue ; //pour éviter le caractere de fin de
ligne


Plutôt qu'insérer un test exécuté inutilement à chaque boucle du for,
pourquoi ne pas initialiser taille à (strlen(phrase)-1), ou encore
initialiser i à (taille-1) ?
Je me doute que l'optimisation n'est pas le soucis de ce petit programme,
mais quand même... ;)

J.No.-les-vieux-réflexes