Rechercher : dans
Par :

Langage c: calcul longueur d une chaine

Dernière réponse le 16 nov 2009 à 06:23:53 djim, le 28 jan 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!

Meilleures réponses pour « langage c: calcul longueur d une chaine » dans :
Langage C - Les chaînes de caractères Voir 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...
Les chaînes de caractères en C++ Voir 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...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...
Introduction au langage C VoirPetite 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...

1

Ravachol, le 28 jan 2005 à 15:57:42
  • +1

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 28 jan 2005 à 16:39:39

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

Répondre à Joshua

3

Ravachol, le 28 jan 2005 à 17:23:19

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

16

pacorabanix, le 31 oct 2009 à 01:57:38

Vous êtes tout à fait dans le juste !

Répondre à pacorabanix

17

pacorabanix, le 31 oct 2009 à 01:58:42

(PS : c'était juste pour mettre une confirmation à ce post, puisque quelqu'un a refait monter le sujet)

Répondre à pacorabanix

4

djim, le 28 jan 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 28 jan 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 30 jan 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 31 jan 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 26 oct 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 26 oct 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 26 oct 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 26 oct 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 8 sep 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 8 sep 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

14

theven, le 30 oct 2009 à 13:38:05

Int my_strlen(*str)
{
int i;

i = 0;
while (*str != '\0')
{
i = i + 1;
str = str + 1;
}
return (i);
}

voila qui resoud ton probleme.

Répondre à theven

15

fiddy, le 30 oct 2009 à 22:21:35

Ou encore mieux :

size_t slen(const char *str) {
   char *p=str;
   while(*(p++));
   return p-str;
}

Cdlt
Google is your friend

Répondre à fiddy

18

Scandale, le 16 nov 2009 à 05:04:28

Je vois qu'on déterre les vieux posts :)

Le but est de ne pas utiliser strlen ! Ma fonction ressemble à ça (testée) :

int strlenclone(const char* chaine)
{
int i = 0;


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

return i;
}

Répondre à Scandale

19

 fiddy, le 16 nov 2009 à 06:23:53

Avant de poster, regarde celui qui a déterré ;-))).
Le but est de ne pas utiliser strlen
Bah, je n'ai pas utilisé non plus strlen. Et en plus, ma fonction est plus performante de par l'usage de pointeur.
Google is your friend

Répondre à fiddy