déclaration variable, chaine de caractère

déclaration variable, chaine de caractère - C++ - Programmation

Marsh Posté le 26-12-2002 à 22:06:59    

je m'y suis surement mal pris, mais mes recherches ont été infructueues (chui un mega newbie de la mort.Mon problème c'est que je voudrais déclarer une chaine de caractère comme variable (une chaine de caractère en entrée clavier), mais je ne sais pas comment faire ? je n'ai vu sque char qui se réfère aux caractères, mais moi je voudrais la chaine complète.. c possible ??
 
merci :)

Reply

Marsh Posté le 26-12-2002 à 22:06:59   

Reply

Marsh Posté le 26-12-2002 à 22:11:35    

en C ou en C++?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 22:13:08    

C++ :)

Reply

Marsh Posté le 26-12-2002 à 22:16:54    

bon
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6.   string chaine;
  7.   cin >> chaine; // lit un mot
  8.   cout << chaine << '\n';
  9.   // cette boucle lit le flux standard ligne par ligne
  10.   // (donc une chaine peut conproter des espaces)
  11.   while(getline(cin, chaine))
  12.   // CTRl-Z pour arretez sous windows
  13.   // CTRl-D sous linux
  14.   {
  15.     cout << chaine << '\n';
  16.   }
  17. }


Message édité par Taz@PPC le 26-12-2002 à 22:17:04

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 22:18:31    

c'est normal que sous dev-cpp il reconnait pas la declaration string ?  :(  :(  :(

Reply

Marsh Posté le 26-12-2002 à 22:19:18    

tu essayes le bout de code que je viens de te donner?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 22:29:23    

ah non j'avais pas essayé , ca marche :) faut simplement mettre using namespace std si j'ai bien compris ??
 
autre chose pourquoi ca marche pas quand je mets les .h ?  
 
merci :)

Reply

Marsh Posté le 26-12-2002 à 22:31:47    

par ce que les .h sont les vieilles versions de la bilbiotheque standard qui ne sont gardées que pour la compatiblité.
 
toute la bibliotheque standard est dans des entetes sans .h et déclarée dans le namespace std. donc, il ne faut jamais oublié le using... voila


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 22:42:30    

merci beaucoup :) :)

Reply

Marsh Posté le 26-12-2002 à 22:43:01    

pas de problème. n'hesite pas à poser des questions et à soumettre du code


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 22:43:01   

Reply

Marsh Posté le 26-12-2002 à 22:54:58    

merci beaucoup c'est pour moi une grande aide :)
ça tombe bien j'en ai des tonnes de questions  :ange:  
 
en fait j'aimerais determiner dans la chaine de caractère, la lettre la plus présente (et le nombre de fois qu'elle est présente), maisje sais pas par où commencer :) aurais-tu qyekqyes urls à me conseiller sur la manipulation de chaine ?
 
mon code ressemble à ça par l'instant
 
#include <iostream.h>
#include <string>
 
using namespace std;
 
int main()
{
  string chaine;
  cin>>chaine;
  ...
  ...
}


Message édité par Umer le 26-12-2002 à 22:56:26
Reply

Marsh Posté le 26-12-2002 à 22:57:05    

#include <iostream.h> sans .h s'il te plait
 
cin >> chaine, ne soit pas avare en esapce ici
 
ben il te faut mémoriser dans un tableau ou autre chose, l'ensemble  des statistic. tu veux la méthode compliquée ou la simple (mais pas forcément)?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:00:58    

non je veux juste que tu m'oriente m'explique ,comment je dois m'y prendre, la démarche à suivre quoi.. (la methode simple pour commencer c mieux non ? :) )

Reply

Marsh Posté le 26-12-2002 à 23:04:15    

ben comme sur papier: si on par du principe qu'il y a 26 lettres dans l'alphabet, il faut faire un tableau de 256 cases avec en face un 0. a chaque fois qu'on trouve une lettre on fait +1
 
on peut parcourir une chaine comme ça
 

Code :
  1. size_t chaine_len=chaine.lenght()
  2. for(unsigned i=0; i<chaine_len; ++i)
  3. {
  4.   chaine[i]; // acces au caractère i (de rang i+1
  5. }


 
une explication sur les tableaux simples (comme en C?)


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:09:03    

ok .. mais j'ai rien compris à ton code.. j'vois que t'utilises les pointeurs ça tombe mal j'y comprends que dalle :-/
 
j'vais bouquiner un peu sur les tableaux :) tu pourrais m'expliquer ton code ? me montrer et m'expliquer un code à mon problème ?
 
grand merci à toi encore  :jap:

Reply

Marsh Posté le 26-12-2002 à 23:10:44    

j'utilise pas de pointeurs...
 
bouqine un peu oui, familiarise toi avec la notion de tableau au sens informatique, ensuite on verra ce que ca donne en C++


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:12:16    

ok :)
 
"++i" ya pas de pointeurs dans ça ?  
 
je confonds avec * je crois.. ?

Reply

Marsh Posté le 26-12-2002 à 23:13:07    

c'est la forme condensé de i=i+1


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:14:57    

et c'est quoi ce i ?  
 
je commence à etre chiant n'est ce pas ?  
 :hello:


Message édité par Umer le 26-12-2002 à 23:16:39
Reply

Marsh Posté le 26-12-2002 à 23:20:08    

tu connais pas les for?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:23:31    

très peu, je vais allez bouquiner sur les boucles et tableau de ce pas..

Reply

Marsh Posté le 26-12-2002 à 23:26:14    

petite note, j'ai commencé le C++/C aujourd'hui  :D

Reply

Marsh Posté le 26-12-2002 à 23:30:29    

correction: t'as commencé la programmation aujourd'hui


Message édité par Taz@PPC le 26-12-2002 à 23:30:37

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:44:12    

oui, si on compte pas le html :)

Reply

Marsh Posté le 26-12-2002 à 23:46:51    

c'est plus un langage de description
 
tu as quoi comme formation?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:52:45    

1S bio

Reply

Marsh Posté le 26-12-2002 à 23:53:38    

et tu veux faire quoi plus tard?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:55:10    

à ton avis  ? :D
futur épitéen ça me plairait bien :)

Reply

Marsh Posté le 26-12-2002 à 23:55:26    

ben la route est longue


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 26-12-2002 à 23:56:53    

je commence trop tard ?

Reply

Marsh Posté le 27-12-2002 à 00:03:23    

umer a écrit :

je commence trop tard ?

non, au contraire. mais t'aruas peu etre pu ommencer par plus facile


Message édité par Taz@PPC le 27-12-2002 à 00:03:40

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 27-12-2002 à 13:21:00    

je trouve que c'est le plus intéréssant :)

Reply

Marsh Posté le 27-12-2002 à 13:30:15    

umer a écrit :

je trouve que c'est le plus intéréssant :)  

oui, mais ca fait appel a des notions assez avancées pour debuter.


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 27-12-2002 à 14:24:40    

j'ai un peu avancé.. je comprends mieux là, sauf un truc  
cette ligne là "size_t chaine_len=chaine.lenght()"
 et d'ailleurs elle pose problème lors de la compilation :(
 
 
le code c'est ça :
 
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
 string chaine;
 cin >> chaine;
 
 char lettres[26];
 unsigned i;
 size_t chaine_len=chaine.lenght();
 for(unsigned i=0;
     i < chaine_len;
     i++)
chaine[i];
}
 
 
et l'erreur de compil : 13  no matching function for call to `basic_string<char,string_char_traits<char>,__default_alloc_template<false,0> >::lenght ()'
 
 
 
sinon j'aimerais comparer ensuite les differents indices et trouver afficher le plus élevé avec la lettre correspondante j'dois faire comment ?  
 
merci :)
 
merci :)

Reply

Marsh Posté le 27-12-2002 à 15:18:43    

devrait pas plutot etre length  ?

Reply

Marsh Posté le 27-12-2002 à 15:33:51    

oui :) merci

Reply

Marsh Posté le 27-12-2002 à 15:46:47    

arf c'est pas un peu compliqué et lourd de comparer les 26 indice entre eux ?

Reply

Marsh Posté le 27-12-2002 à 17:35:58    

je m'absente la mais je t'en reparle ce soir


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 27-12-2002 à 17:59:29    

Le hic c'est que ton code il fait rien :
chaine[i];  
ca fait rien ca !
 
faut que tu te créés un tableau de fréquences et que tu y stockes les frequences de chaque caracteres.
un truc du genre :

Code :
  1. unsigned long frequences[256];  // chaque lettre peut apparaitre jusqu'a +4 milliards de fois (=> un long)
  2. // initialiser toutes les valeurs à 0
  3. //puis ton code devient :
  4. for(unsigned i=0;
  5.     i < chaine_len;
  6.     i++)
  7. {
  8.     ++frequences[(unsigned char) chaine[i]];
  9. }


c'est ce que t'as fait avec lettres, sauf que 256 c'est plus sûr et simple (avec 26, faut faire un truc genre chaine[i] - 'A' et si ta lettre est autre chose qu'une majuscule ... aie aie aie)
 
Tu peux le faire version full stl en utilisant un vector au lieu du tableau classique.

Code :
  1. vector <unsigned long> frequences(256);


ca s'utilise pareil après, moyennant "#include <vector>".
Apres pour obtenir le max, tu peux le faire simplement (tu parcours de 0 à 255, et tu cherches le max) ou full stl, en traint avec sort de <algorithm>, et là t'as les caracteres triés par ordre d'apparition.
Mais la faut créer un tableau de structures du type (caractere, frequence) car sinon tu sais plus a quel caractere est associée telle frequence.
On peut aussi chipoter pour le 256, et préconiser (UCHAR_MAX + 1) de <climits>


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed