Я хочу знать (я пытался, но программа зависает), если есть способ создать функцию, которая возвращает char * или char [], поэтому мне не нужно изменять строку, которую я посылаю функции , чтобы узнать, как сделать мой код более красноречивым.Могу ли я использовать char [] или char * в качестве возвращаемого значения функции?
#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 ;
}
Так я решил это, я думаю, что у меня возникла мысль об утечке памяти, не так ли? Обратите внимание, что я не изменяя исходную строку, которая является то, что я собирался сделать, и я не знаю, куда поместить free(newText)
так распознан, но еще можно использовать для 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 ;
}
Вы можете вернуть 'char *', но вам также нужно подумать о местонахождении в памяти, в которую будет входить измененная строка. –
да, это простая вещь-указатель. У вас могут быть указатели в качестве возвращаемых значений функций. –
@MM. Я сделал это так, потому что я не мог сделать это так, как я прошу, по моей первоначальной идее, я бы не стал измените строку. – newbie