Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
920 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Chaine de caractere en C++ :S

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Chaine de caractere en C++ :S

n°1620104
king_67
Posté le 06-10-2007 à 19:32:57  profilanswer
 

Bonjour, je debute en programmation et j'ai de serieux probleme avec les chaine de caratere en C++, Je suis en train de lire un livre pour apprendre les principale caracteristique du language mais je reste avec de serieux probleme avec les chaines de caratere. Le probleme est que je ne peut jamais transferer ma chaine d'une fonction a une autre, autant par adresse que par valeur et je n'y comprend rien :S. Voila mon code  
 

Citation :

#include <iostream>
#include <cstring>
 
using namespace std;
 
char Oter_Les_redondances(char& Tableau[]) {
 
 
 Tableau[0] = 'x'
 cout << Nombre << endl;
 
 return(0);
}
 
void main ( void ){
 
 char Oter_Les_redondances(char& Tableau[]);
 char Rep[1000];
 
 cout << "Hmm hmm : ";
 cin.getline(Rep, 1000);
 
 Oter_Les_redondances(Rep);
 cout << "Par le main : " << Rep << endl;
 
}


 
Voici les erreur que le compilateur me donne :  
 
1>d:\program files\microsoft visual studio 8\projects\programmation c++\c et un peu +\chap5_56_24.cpp(17) : error C2234: 'Tableau' : arrays of references are illegal
1>d:\program files\microsoft visual studio 8\projects\programmation c++\c et un peu +\chap5_56_24.cpp(24) : error C2440: '=' : cannot convert from 'char' to 'char *'
1>        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1>d:\program files\microsoft visual studio 8\projects\programmation c++\c et un peu +\chap5_56_24.cpp(24) : error C2146: syntax error : missing ';' before identifier 'cout'
1>d:\program files\microsoft visual studio 8\projects\programmation c++\c et un peu +\chap5_56_24.cpp(24) : error C2065: 'Nombre' : undeclared identifier
1>d:\program files\microsoft visual studio 8\projects\programmation c++\c et un peu +\chap5_56_24.cpp(31) : error C2234: 'Tableau' : arrays of references are illegal
1>d:\program files\microsoft visual studio 8\projects\programmation c++\c et un peu +\chap5_56_24.cpp(37) : error C2664: 'Oter_Les_redondances' : cannot convert parameter 1 from 'char [1000]' to 'char *[]'
 
Je vous explique comment j'ai proceder, premierement j'ai besion que l'utilisateur entre une chaine de nombre, ensuite, je doit enlever les redondance avec une fonction, donc, il faut que je transfere cette chaine de caractere a la fonction pour quelle le modifie ou me la renvoie sans redondance, mais voila que mon probleme se pose, ma chaine de caratere ne peut pas se faire donner par valeur ou par adresse... Esce moi qui utilise une mauvaise maniere ? Une mauvaise architecture ou autre ?
 
 
Donc aucune de mes chaine ne sont modifiable, je n'y comprend vraiment rien... Quelqu'un peut m'aider ?


Message édité par king_67 le 06-10-2007 à 19:40:18
mood
Publicité
Posté le 06-10-2007 à 19:32:57  profilanswer
 

n°1620106
durkheim
Posté le 06-10-2007 à 19:44:54  profilanswer
 

Pourquoi tu utilises pas des String?? T'es en C++...

n°1620109
king_67
Posté le 06-10-2007 à 19:51:11  profilanswer
 

Pourtant, mon livre (datant de 2001) me dit clairement qu'une chaine de caractere est en fait un tableau de caractere... En aucun cas je n'est croiser de variable String dans cet ouvrage... Hmmm, c'est douteux

n°1620110
Joel F
Real men use unique_ptr
Posté le 06-10-2007 à 19:54:06  profilanswer
 

#include <tring>
et std::string.
 
ah et donnes le titre de ton bouquin avant de le jeter, car apparament c'ets une belle merde qui apprends à faire du C--

n°1620112
king_67
Posté le 06-10-2007 à 19:55:51  profilanswer
 

C et un peu + Résolution de problèmes et programmation en C++ Deuxieme edition par Yves Boudreault et Wacef Guerfali. Tu en aurais un a me conseiller donc ?
 
Mais http://www.commentcamarche.net/cpp/cppstring.php3 dit clairement : "En langage C++, une chaîne de caractères est un tableau" Donc il y aurais 2 facon de declarer des chaine de caractere ?


Message édité par king_67 le 06-10-2007 à 20:07:16
n°1620144
durkheim
Posté le 06-10-2007 à 21:04:45  profilanswer
 

L'histoire du tableau reste vrai au niveau mémoire, mais en C++ t'es censé passer par la classe String qui encapsule ce genre de détail qui favorise les erreurs.

 


edit: regarde ici pour un exemple: http://fr.wikibooks.org/wiki/Progr [...] sse_string

 

reedit: Kangol a raison et moi j'étais fatigué, j'ai écrit que des conneries...


Message édité par durkheim le 07-10-2007 à 11:32:22
n°1620151
KangOl
Profil : pointeur
Posté le 06-10-2007 à 21:35:04  profilanswer
 

euh ... non, en C, une chaine se termine par un  \0
en C++, la longueur est stockée dans l'objet encapsulant

n°1620201
Joel F
Real men use unique_ptr
Posté le 06-10-2007 à 22:56:59  profilanswer
 

Boudreault et Guerfali. OMG. Tout sauf celui là quoi, c'est écris genre pour des hommes de 1880 ...
 
Encore une fois les incontournables :
 
http://cpp.developpez.com/cours/cpp/
http://cpp.developpez.com/cours/stl/
http://cpp.developpez.com/cours/cppavance/
http://bruce-eckel.developpez.com/livres/cpp/ticpp/

n°1620212
king_67
Posté le 06-10-2007 à 23:15:17  profilanswer
 

D'accord merci de vos conseils :) Je vais regarder tes lien Joel F, merci bien.
 
EDIT : Mais Joel, c'est vraiment si pire que ca ce que je lit ? Tu as deja lu ?

Message cité 1 fois
Message édité par king_67 le 06-10-2007 à 23:25:03
n°1620225
king_67
Posté le 07-10-2007 à 01:01:09  profilanswer
 

Encore un autre probleme, mais celui la je ne sait vraiment pas quoi faire, J,ai fait une petite recherche sur Google et j'ai trouver que c'est le caratere que je demandait qui n'était pas trouvable. Voila mon code :  
 

Citation :


 
#include <iostream>
#include <string>
 
using namespace std;
 
string TrouverNombre (string& Chaine, int& Pos) {
 
 string Tampon;
 
 for( ; Chaine[Pos] != ' '; Pos++ ) {
  Tampon += Chaine[Pos];
 }
 Pos++;
 return(Tampon);
}
 
 
string Oter_Les_redondances(string& Tableau) {
 
 string TrouverNombre (string& Chaine, int& Pos);
 
 int Pos=0, j;
 string Tampon;
 string Tampon2;
 string Nouv;
 
 Tampon = TrouverNombre(Tableau, Pos);
 Nouv += Tampon;
 
 for(j=0; Tableau[j] != '\0'; j++) {
  if(Tampon == TrouverNombre(Tableau, Pos))
   continue;
  else {
  Tableau += Tampon;
  Tampon = TrouverNombre(Tableau, Pos);
  }
 }
 
 return(Nouv);
}
 
 
 
 
int main (){
 
 string Oter_Les_redondances(string& Tableau);
 string Rep;
 
 cout << "Donnez des nombres entier : ";
 getline(cin,Rep);
 
 Oter_Les_redondances(Rep);
 cout << "Reponse : " << Rep << endl;
 
}
 


 
Je demande à l'utilisateur de donner des nombres entier, ensuite, mon programme redonne la chaine mais sans redondance.  
 
Tout va bien jusqu'a ce que "Pos" de "TrouverNombre" devienne "7". J'ai essayer mon programme avec la chaine : "10 10 8", donc le 7eme chiffre serait '\0'. A la fin il me donne un erreur : "Expression : string subscript out of range". J'ai fait le debugger en fesant des breakpoint dans ma fonction mais il bloque vraiment a la ligne 10. Quelqu'un pourrait essayer le code et/ou l'analyser pour me dire ce qui ne va pas ? Merci a l'avance

mood
Publicité
Posté le 07-10-2007 à 01:01:09  profilanswer
 

n°1620245
KangOl
Profil : pointeur
Posté le 07-10-2007 à 10:52:20  profilanswer
 

et si tu passais par un std::set ?

n°1620252
Joel F
Real men use unique_ptr
Posté le 07-10-2007 à 12:14:31  profilanswer
 

king_67 a écrit :


Mais Joel, c'est vraiment si pire que ca ce que je lit ? Tu as deja lu ?


j'ai lu plein de bouquin de C++ avant de préparer mes support de cours
et en gros y a deux catégories :
- les bouqins de C++ écris par des gens qui font du C++.
- les bouqins de C++ écris par des gens qui font du C.
et les bouqins de la 2e catégories, à part cale-armoire, ils servent à rien.
 
Et en général, un bouqin de C++ qui au bout de 4 chapitres a pas commencer à parler de la STL,
bah il vaut pas la peine qu'on s'y attarde.  
 
Un jour, on appelera C++ par un autre nom et ca évitera à des brèles qui
savent à peine écrire du C propre de se fendre d'écrire du C++.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Chaine de caractere en C++ :S

 

Sujets relatifs
Fonction à utiliser dans une chaîne de caractère dans AccessQuestion très difficile: récup d'une portion de chaîne et substitution
extraire les deux premiers caracteres d'une chaine de caracteres[Résolu] Javascript Rajout de td en chaine dans un tableau
Supprimer les espces blancs en fin de chaînedébutant: trouver une chaîne dans une ligne, en remplacer une autre
[PHP][REGEX]réduire le texte d'un lien dans une chaineRequête select sur une chaine sans tenir compte des espaces
Supprimer tout les chiffres/nombres contenus dans une chaine 
Plus de sujets relatifs à : Chaine de caractere en C++ :S


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)