Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

Langage c: calcul longueur d une chaine

djim, le vendredi 28 janvier 2005 à 15:36:56 
 Signaler ce message aux modérateurs

Salut!

je dois calculer la longueur d'une chaine de caractere

est ce ke ceci est bon :

#include <stdio.h>
#include <conio.h>

char ptc[6]= "hello";
int i;

void main(void)
{


i = 0;
while(ptc[i] != '\0')
{
i++;
}
return i;

printf("votre chaine de caractere a une longueur de %d caracteres",i);

}


merci pour votre aide!

1

Ravachol, le vendredi 28 janvier 2005 à 15:57:42
  • +2

Salut,
Sinon il y a la fonction "strlen" dispo en incluant "string.h".
Dans ton cas tu auras un truc dans ce genre:

i = strlen(ptc); 

Ton return i me paraît bizarrement placé , non ?

A++
C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)

Répondre à Ravachol

2

Joshua, le vendredi 28 janvier 2005 à 16:39:39

Déclare comme ça : char ptc[6]= "hello\o";
ça fonctionnera mieux.

Répondre à Joshua

3

Ravachol, le vendredi 28 janvier 2005 à 17:23:19
  • +1

Salut,
Il me semble que justement l'une des propriétés des constantes chaines en C est que le compilateur place lui même le caractère de code nul en mémoire après le dernier caractère.
Donc char ptc[6] = "hello" ne posera aucun problème.
A moins que je ne fasse fausse route.

A++
C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)

Répondre à Ravachol

4

djim, le vendredi 28 janvier 2005 à 18:51:22

Merci a vous de m'avoir repondu

j'ai une autre question

je dois ecrire une fonction" int longueur1 (char *ptc) ki calcule la longueur de la chaine pointer par ptc.

que donnerai cette " algorithme"

merci pour votre aide

Répondre à djim

5

etienne, le vendredi 28 janvier 2005 à 23:12:43

Ta fonction serait inutile, parce que si on la compare le prototype de la fonction strlen avec celle de ta fonction ben...

int strlen(char const *chaine);
int longueur1(char *ptc);

ben comme tu vois c'est la meme chose... alors ca serait inutile...
pourquoi réinventé la roue quand on l'a déja...

Répondre à etienne

6

blurk, le dimanche 30 janvier 2005 à 13:16:11

Salut, si je peux me permetre
c'est peut être inutile mais ça fonctionne
c'est peut être un cas d'école ?
si ça peut éviter d'utilser string.h ou stdio.h
ça rend l'exécutable plus petit. C'est parfois utile dans les systèmes embarqués. c'est rare, mais ça tue pas le chien.
a+ ¤

Répondre à blurk

7

fenomen, le lundi 31 janvier 2005 à 18:00:14

Main()
{char *car;
car = (char*)malloc(27*sizeof(char));
printf("Entrez un mot: \n");
scanf("%s",car);
printf("le nombre de caracteres est : %d",strlen(car));
getch();
}

Répondre à fenomen

8

siiimo, le vendredi 26 octobre 2007 à 11:37:23

Bonjour,
j'ai pas compris le role du fonctions 'malloc' et pourquoi vous avez fait char* et non pas char
merci d'avance

Répondre à siiimo

9

lami20j, le vendredi 26 octobre 2007 à 11:42:12

Salut,

avec char on peut declarer un tableu de caractères qui aura un espace mémoire attribué

si un utilise un pointeur de caractère char * avec la commande malloc nous pouvons attribué dynamiquement de la mémoire

dans le cas
car = (char*)malloc(27*sizeof(char));

si sizeof char donne 1 octet alors on aura un un espace alloué de 27 octets
une fois fini le travail avec car on peut liberer la mémoire avec free

lami20j

Répondre à lami20j

10

dreams07, le vendredi 26 octobre 2007 à 11:53:37

Bonjour,
le programme est correct mais il y a probleme c kil ne pt pa calculer les espaces entre les mots

Répondre à dreams07

11

c-moi, le vendredi 26 octobre 2007 à 15:28:27

Bonjour,

Pour commenter le code proposé par fenomen je ne vois pas l'utilité du malloc.
Le malloc est utilisé pour une allocation dynamique, Or ici c'est clairement du statique : la taille du tableau est connue à l'avance.

Plutôt que de faire

char *car;
car = (char*)malloc(27*sizeof(char)); 


Je serai d'avis de directement faire ceci :

#define BUF_MAX_SIZE 27

void
main()
{
char car[BUF_MAX_SIZE];
/* Mise à 0 */
memset(&car, 0, BUF_MAX_SIZE);

printf("Entrez un mot: \n");
scanf("%s",car);
printf("le nombre de caracteres est : %d",strlen(car));
getch();
}



memset permet de s'assurer que tout le tableau contient des 0, ce qui permet d'être certain que notre chaine de caractère copie grâce à scanf se termine par un '\0'
Après, je pense que scanf() termine la chaine de caractère copiée par un '\0' donc le memset n'est pas obligatoire... a priori.


Maintenant, reproduire strlen n'est pas des plus compliqués, à partir du moment où l'on sait faire des itérations sur un tableau et que l'on sait aussi par quoi se termine une chaine de caractère.


Bon courage,

c-moi

Répondre à c-moi

12

dzoun, le lundi 8 septembre 2008 à 18:17:29

Salut. Pour faire rapide :

(Sans les includes)

void main()
{
//Déclaration de la chaine de 6 caratères (5 pour l'ordi commencant de 0)
char chaine[5] = "hello\0";

//Calcul de la longueur de la chaîne
int i = strlen(chaine);

//Retour à l'utilisateur de i
printf("La chaine \"hello\" contient %ld caracteres\n\n", i);

//Pause de la console (si tu es sous Bugger 3000 [Windows])
system("pause");
return 0;
}

Répondre à dzoun

13

 fiddy, le lundi 8 septembre 2008 à 18:25:41

Salut,
A force de vouloir faire trop vite, on fait des bêtises ;)
Tu as mis, je cite :

char chaine[5] = "hello\0"; 


Donc le \0, ne sera pas stocké dans la chaîne. Aïe.
char chaine[6] est mieux.
Mais plus simple encore :
char chaine[]="hello";

Cdt
Google is your friend

Répondre à fiddy
Langage C - Les chaînes de caractères Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne... www.commentcamarche.net/contents/c/cstring.php3
[langage C]remplacer chaine de caractere Bonjour, j'aimerais savoir s'il est possible de faire en langage C ceci: j'ai par exemple un fichier test.txt dans lequel il se trouve la chaine de caractere suivante: toto est il possible de remplacer cette chaine de caractere par une autre... www.commentcamarche.net/forum/affich-3184665-langage-c-remplacer-chaine-de-caractere
Les chaînes de caractères en C++ Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une... www.commentcamarche.net/contents/cpp/cppstring.php3
[Langage C] C/C++ Erreur de segmentationQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux... www.commentcamarche.net/faq/sujet-4791-langage-c-c-c-erreur-de-segmentation
Les files en langage CLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un... www.commentcamarche.net/faq/sujet-8282-les-files-en-langage-c
Les piles en langage CLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage... www.commentcamarche.net/faq/sujet-8283-les-piles-en-langage-c
C comparaison caracteressalut tout le monde bon je bloque sur un truc tout bete: je suis en langage C et je cherche a comparer 2 caractere donc j'ai deux chaines de caracteres temp et longueur longueur est vide et temp comtient un truc du genre "240 60" et dans longueur je... www.commentcamarche.net/forum/affich-1834621-c-comparaison-caracteres
[langage C] : projet à réaliser (Résolu)Bonjour, J'ai un projet à réaliser en langage C. Je dois commencer par élaborer l'algorithme avant de programmer en C. Le problème est que je ne sais pas vraiment par où commencer. Est-ce que quelqu'un pourrait m'aider ? Voici le sujet : Créer un... www.commentcamarche.net/forum/affich-2145367-langage-c-projet-a-realiser
Cours des files et pile et listes chainéesbonjour , je cherche un cours de langage c qui contient des parties bien detaillé sur les piles les files et les listes chainées.... et merci a tous les personnes qui veulent m'aidez d'apprendre cette partie www.commentcamarche.net/forum/affich-2532032-cours-des-files-et-pile-et-listes-chainees
Langage C++ - Les types de donnéesLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître... www.commentcamarche.net/contents/cpp/cpptype.php3
Langage C - Les types de donnéesLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le... www.commentcamarche.net/contents/c/ctype.php3
Introduction au langage CPetite histoire du C Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70. Leur but était de permettre de développer un langage qui permettrait d'obtenir un système d'exploitation de type UNIX portable. D.Ritchie... www.commentcamarche.net/contents/c/cintro.php3