Qual è un modo in cui qualcuno può trovare la lunghezza di una matrice di caratteri?Trovare la lunghezza di una matrice di caratteri in C
sarò felice di accettare pseudo-codice, ma non sono contrario a qualcuno che scrive fuori se vorrebbero :)
Qual è un modo in cui qualcuno può trovare la lunghezza di una matrice di caratteri?Trovare la lunghezza di una matrice di caratteri in C
sarò felice di accettare pseudo-codice, ma non sono contrario a qualcuno che scrive fuori se vorrebbero :)
disponibile The array di caratteri è null
terminata,
char chararray[10];
size_t len = strlen(chararray);
'sizeof()' asnd 'strlen()' entrambi restituiscono 'size_t', che differisce da' int' in quanto è potenzialmente più grande o più piccolo e sicuramente senza segno. –
Grazie ha funzionato bene – Sam
Dicendo "Array di caratteri" intendi una stringa? Come "ciao" o "hahaha questa è una stringa di caratteri" ..
Ad ogni modo, utilizzare strlen(). Leggi un po 'su di esso, ci sono un sacco di informazioni su di esso, come here.
Se è un letterale o un 'carattere [#]', puoi usare 'sizeof', ma fai attenzione a non provare a usarlo su un' char * ' –
Se usi' sizeof', non dimenticare di sottrarre 1 per il terminatore null. – dan04
@ dan04: solo se l'array è inizializzato con lunghezza implicita come in 'char s [] =" sup ";'. –
Se si dispone un array, allora si può trovare il numero di elementi nella matrice dividendo la dimensione della matrice in byte per la dimensione di ogni elemento in byte:
char x[10];
int elements_in_x = sizeof(x)/sizeof(x[0]);
Per caso specifico di char
, dal sizeof(char) == 1
, sizeof(x)
restituirà lo stesso risultato.
Se si dispone di un puntatore a un array, non è possibile trovare il numero di elementi nella matrice puntata. Devi tenerne traccia da solo. Ad esempio, dato:
char x[10];
char* pointer_to_x = x;
non c'è modo di dire da soli pointer_to_x
che punta a una matrice di 10 elementi. Devi tenere traccia di tali informazioni da soli.
Ci sono molti modi per farlo: puoi memorizzare il numero di elementi in una variabile o puoi codificare il contenuto dell'array in modo tale che tu possa ottenere le sue dimensioni in qualche modo analizzandone il contenuto (questo è effettivamente ciò che è nullo -le stringhe terminate: collocano un carattere '\0'
alla fine della stringa in modo da sapere quando termina la stringa).
'sizeof()' asnd 'strlen()' entrambi restituiscono 'size_t', che differisce da' int' in quanto è potenzialmente più grande o più piccolo e certamente senza segno. –
@Chris Lutz: È vero. –
È possibile utilizzare strlen
strlen(urarray);
è possibile codificare da soli in modo da capire come funziona
size_t my_strlen(const char *str)
{
size_t i;
for (i = 0; str[i]; i++);
return i;
}
se si desidera che la dimensione della matrice quindi si utilizza sizeof
char urarray[255];
printf("%zu", sizeof(urarray));
Qualsiasi 'strlen()' dovrebbe restituire 'size_t' (che non è firmato) non' int' (che è firmato). E l'identificatore 'printf()' per 'size_t' è' "% zu" '(o' "% zx" 'o' "% zo" 'per esadecimale o ottale). –
Hai ragione, una lunghezza può a stento essere negativa :) – dco
Se si desidera che la lunghezza dell'array di caratteri sia sizeof(array)/sizeof(array[0])
, se si desidera la lunghezza di La stringa utilizza strlen(array)
.
funziona solo se tutti gli elementi hanno la stessa lunghezza? –
Ciao anche se le risposte sopra sono OK, ecco il mio contributo alla tua domanda.
//returns the size of a character array using a pointer to the first element of the character array
int size(char *ptr)
{
//variable used to access the subsequent array elements.
int offset = 0;
//variable that counts the number of elements in your array
int count = 0;
//While loop that tests whether the end of the array has been reached
while (*(ptr + offset) != '\0')
{
//increment the count variable
++count;
//advance to the next element of the array
++offset;
}
//return the size of the array
return count;
}
Nella funzione main si chiama la dimensione della funzione passando l'indirizzo del primo elemento dell'array. Per esempio:
char myArray[] = {'h', 'e', 'l', 'l', 'o'};
printf("The size of my character array is: %d\n", size(&myArray[0]));
Tutto il meglio
Perché avere una variabile separata per l'offset quando si può semplicemente usare il conteggio? Ecco una versione più breve (ma più difficile da capire): 'int strlen (const char * pStr) { \t int i = 0; \t while (* pStr) { \t \t ++ i; \t} \t ritorno i; } ' – DividedByZero
V'è anche una forma compatta per questo, se non si vuole fare affidamento su strlen. Partendo dal presupposto che l'array di caratteri che si stanno prendendo in considerazione è "msg":
unsigned int len=0;
while(*(msg+len)) len++;
utilizzando sizeof()
char h[] = "hello";
printf("%d\n",sizeof(h)-1); //Output = 5
utilizzando string.h
#include <string.h>
char h[] = "hello";
printf("%d\n",strlen(h)); //Output = 5
utilizzando la funzione (
strlen
implementazione)
int strsize(const char* str);
int main(){
char h[] = "hello";
printf("%d\n",strsize(h)); //Output = 5
return 0;
}
int strsize(const char* str){
return (*str) ? strsize(++str) + 1 : 0;
}
Vuoi dire altro che cercare il NUL? –
Uno 'strlen()', o 'sizeof()'. Dipende da ciò di cui hai bisogno. – ruslik
una stringa è un tipo specifico di oggetto memorizzato * in * una matrice di caratteri (una matrice di caratteri non può contenere una stringa) –