begin process at 2012 05 28 15:16:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

chaine de caractéres


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

chaine de caractéres

lundi 12 février 2007 à 09:59:02 | chaine de caractéres

niamor23

Membre Club
Salut, voici mon probléme, mon programme contient une chaine de caractéres avec des espaces, et je voudrais envoyé chaque bloc de caractére séparé par des espaces, vers un tableau.

exemple:
AnsiString valeur="1234 5678 9412";
char tab[50];

voila ce que je voudrais avoir en utilisant une fonction:
tab[1]=1234
tab[2]=5678
tab[3]=9412


Merci d'avance pour la réponse.

a+

lundi 12 février 2007 à 12:22:41 | Re : chaine de caractéres

yoyo269

Membre Club
Salut !

Déjà il y a un souci avec la déclaration de ton tab.
Dans tab[50] tu ne peux pas mettre tout ça.
Voilà un exemple de ce que tu pourrais faire.

int i = 0;
char tab[10][50], * c; // tab[10][50] pour 10 chaines de 49 caractères maximum chacune.

c = valeur;
while(*c)
{
    if(*c == ' ')
    {
        *c = 0;
        strcpy(tab[i], valeur);
        i++;
    }
    c++;
}
strcpy(tab[i], valeur);

Pas testé mais ça devrait être ça.
Tiens moi au courant.

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]

lundi 12 février 2007 à 14:30:03 | Re : chaine de caractéres

turnerom

				
						Salutn je te conseil d'utiliser Boost qui fait ca tres bien :


#include <iostream>

#include <boost/tokenizer.hpp>


// découpe la chaine selon les séparateurs donnés
vector<string> split( const std::string & Msg, const std::string & Separators )
{
// typedef pour alléger l'écriture
typedef boost::tokenizer<boost::char_separator<char> > my_tok;

// vector pour le resultat
vector<string> v;

// séparateur personnalisé
boost::char_separator<char> sep( Separators.c_str() );

// construire le tokenizer personnalisé
my_tok tok( Msg, sep );

// itérer la séquence de tokens
for ( my_tok::const_iterator i = tok.begin();
i != tok.end();
++i )
{
v.push_back(*i);
}
}

int main()
{
string
valeur="1234 5678 9412";
vector<string> v=split(valeur, " ");
}


Ainsi tu as tout tes resultats dans v[0], v[1], ...



TuRn3r
lundi 12 février 2007 à 14:32:59 | Re : chaine de caractéres

SAKingdom

Membre Club
yoyo>> Tu recopie 1234 dans toute les chaines car tu utilise valeur qui ne change jamais

Voici quelque chose d'optimisé (je pense):

char buffer[] = "1234 5678 9012", *c = buffer;
char tab[4][10];
int j = 0;

do
{
    int k = 0;
    while(*c != ' ' && *c) tab[j][k++] = *c++;
    tab[j++][k] = 0;
} while(*c++);

C++ (@++)

lundi 12 février 2007 à 14:37:10 | Re : chaine de caractéres

yoyo269

Membre Club
Oups ! Très juste SAKingdom !
Oublié un petit quelque chose moi.
int i = 0;
char tab[10][50], * c, * d; // tab[10][50] pour 10 chaines de 49 caractères maximum chacune.

d = c = valeur;
while(*c)
{
    if(*c == ' ')
    {
        *c = 0;
        strcpy(tab[i], d);
        i++;
        c++;
        d = c;
    }
    else c++;
}
strcpy(tab[i], d);

Là ça sera déjà mieux.
En plus c'est super rapide.

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]

lundi 12 février 2007 à 14:56:43 | Re : chaine de caractéres

SAKingdom

Membre Club
Mais le problème avec ton code, c'est que tu parcoure toute la chaine 2x alors qu'une seule suffirait:

while(*c)
{
    if(*c == ' ')

On cherche jusqu'à trouver un espace

    strcpy(tab[i], d);

On revient au début du mot puis on reparcoure une seconde fois jusqu'à l'espace (remplacé par 0, on se retrouve donc, en plus, avec une chaine initiale modifiée).
______
do
{
    int k = 0;
    while(*c != ' ' && *c) tab[j][k++] = *c++;

On copie dans tab[j] tout les caractères rencontrés jusqu'à tomber sur un espace ou sur un 0.

    tab[j++][k] = 0;
} while(*c++);

On ajoute le 0 à la chaine destinatrice (on conserve donc la chaine initial intacte) puis on test le caractère. Si il s'agit d'un caractère (l'espace ici), on le saute et on continue sinon, il s'agit du 0 de fin de chaine donc on quitte. On a parcourue la chaine qu'une seule fois.

C++ (@++)

lundi 12 février 2007 à 15:13:59 | Re : chaine de caractéres

yoyo269

Membre Club
C'est vrai que j'avais pas fait attention qu'en utilisant le strcpy() je faisais 2 parcours.
Donc je suis complètement ok avec toi.
Rien à dire ! 20/20

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]



Cette discussion est classée dans : chaine, espaces, tab, caractéres


Répondre à ce message

Sujets en rapport avec ce message

TABLEAUX SANS ESPACES [ par golum ] char tab[10];../../*je cherche un test pour savoir si un tableau libéré de ses espaces est vide ...*/if(trim(tab)!='') Supprimer les espaces dans une chaine [ par ticalimero ] Je sais, ca parait tout simple...mais je vais mettre unteps fou à le faire alors si vous pouviez m'aider svp !Je veux supprimer tous les espaces d'une langage c [ par trinity666 ] bonjour 1)je ne comprend pas pourquoi ma fonction atobm ne compile pas; le compilateur dit kil ya 1 erreur ds while((c=fgetc(fp))!=EOF)){ mais je vois Chaine de caractère [ par Thanatoster ] Bonjour a tous, mon problème est le suivant, pour les cours je dois faire un programme d'apres l'énoncé suivant"saisir au clavier des éléments chaine Enlever les espaces [ par darkwhite ] Salut a tous, bah voila je veux resoudre l'exercice batteau d'enlever les espaces d'une chaine de caracteres. Pourtant j'ai fait ce code : # include i recherche d'une chaine dans un fichier [ par ymlf ] Problème au niveau du scanf()int recherche(char *chaine,char *FileName){ int i, k; char *tmp, *tab[50], *timer[20]; FILE *svf; svf=fopen(FileName,"r Algo trop lent :( [ par MoDDiB ] Bon tout d'abord je tient à préciser qu'il s'agit du concours prologin auquel je compte participer donc si certaines personnes ne veulent pas m'aider Inserer des espaces dans une chaine de caractère [ par MorbhAck ] Bonjour a tous !Alors c'est très simple mais je coince un peu :j'ai une chaine de caratère :par ex:char chaine[]="0123456789";puis jaimerai lui inseré pb de conversion de chaine de caractéres [ par Thanatos ] Bonjour,Je désirerais faire un programme sur les fonctions logiques de base : un utilisateur rentre une fonction logique et le programme lui sort la t problème lecture fichier de grande taille [ par africanwinners ] j'ai concu ce code pour lire le contenu d'un fichier et le mettre dans un tableau à 2 dimensions: ca marche pour un fichier de petite taille:et dès qu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales