Je veux savoir (j'ai essayé de mais gèle le programme) s'il y a un moyen de créer une fonction qui retourne un char * ou un char [], donc je ne dois pas modifier la chaîne que j'envoie à la fonction , pour apprendre à rendre mon code plus éloquent.Puis-je utiliser char [] ou char * comme valeur de retour d'une fonction?
#include <stdio.h>
#define LOW_LETTERS 97
#define CAP_LETTERS 65
#define N_LETTERS 26
#define DIFF 32
#define NUMBERS 48
#define N_DIGITS 9
void transformText (char text[])
{
for (int i = 0 ; text[i] != '\0' ; i++)
{
if ((text[i] >= LOW_LETTERS) && (text[i] <= LOW_LETTERS + N_LETTERS))
text[ i ] = text [ i ] - DIFF ; //same letter, but upper case
else
if ((text [ i ] >= CAP_LETTERS) && (text[i] <= CAP_LETTERS + N_LETTERS))
text [ i ] = text [ i ] + DIFF ; //same letter, but lower case
else
if (text [i] >= NUMBERS && text[i] <= NUMBERS + N_DIGITS)
text[i] = '*'; //turns every number to a '*'
}
}
int main (void)
{
char text[] = "foOo123Oo44O99oO00" ;
transformText (text) ;
printf ("%s\n", text) ; //prints FOoO***oO**o**Oo**
return 0 ;
}
C'est de cette façon que je l'ai résolu, je pense que j'ai un problème de fuite de mémoire, n'est-ce pas? Notez que je ne suis pas modifier la chaîne d'origine, ce qui est ce que je comptais faire, aussi je ne sais pas vraiment où mettre le free(newText)
il est reconnu, mais encore utilisable pour main()
#include <stdio.h>
#define LOW_LETTERS 97
#define CAP_LETTERS 65
#define N_LETTERS 26
#define DIFF 32
#define NUMBERS 48
#define N_DIGITS 9
#define BUFFER 128
char* transformText (char text[])
{
char *newText = (char *) malloc (BUFFER) ;
for (int i = 0 ; text[i] != '\0' ; i++)
{
if ((text[i] >= LOW_LETTERS) && (text[i] <= LOW_LETTERS + N_LETTERS))
newText[ i ] = text [ i ] - DIFF ; //same letter, but upper case
else
if ((text [ i ] >= CAP_LETTERS) && (text[i] <= CAP_LETTERS + N_LETTERS))
newText [ i ] = text [ i ] + DIFF ; //same letter, but lower case
else
if (text [i] >= NUMBERS && text[i] <= NUMBERS + N_DIGITS)
newText[i] = '*'; //turns every number to a '*'
else
newText[i] = text[i] ;
}
return newText ;
}
int main (void)
{
char text[] = "foOo123Oo44O99oO00" ;
printf ("%s\n", transformText (text)) ; //prints FOoO***oO**o**Oo**
return 0 ;
}
Vous pouvez retourner 'char *' mais vous devez également penser à la localisation de la chaîne modifiée. –
oui c'est une simple chose pointeur .. vous pouvez avoir des pointeurs comme valeurs de fonctions retournées –
@MM Je l'ai fait de cette façon, parce que je ne pouvais pas faire comme je le demande, dans mon idée originale, je ne serais pas modifiez la chaîne. – newbie