У меня есть программа для изменения строки и преобразования ее в верхний регистр. Если я пишу helloworld!
, выход должен быть !DLROWOLLEH
. Но если я напишу hello world!
, то выход будет !DLRO
. Не могли бы вы рассказать мне, где может возникнуть проблема?Преобразование строчных букв в верхний регистр
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
char * reverse(const char * text)
{
if (text==NULL)
return NULL;
int length = strlen(text);
char * reversed_string = malloc(length+1);
for(int i = 0; i < length/2; ++i)
{
reversed_string[i] = text[(length-1) - i];
reversed_string[(length-1) - i] = text[i];
}
reversed_string[length] = '\0';
//upper(reversed_string);
return reversed_string;
}
void upper(char *str1)
{
while(*str1!='\0')
{
if(*str1>96&&*str1<123)
*str1=*str1-32;
str1++;
}
}
int main(int argc, char * argv[])
{
char p[256];
fgets(p, sizeof(p), stdin);
char * rev_str = reverse(p);
upper(rev_str);
printf("%s\n", rev_str);
rev_str = 0;
return 0;
}
Вы действительно определяете 'upper()' __inside__ 'reverse()' ??? –
@SouravGhosh Это расширение gcc, и, следовательно, это, вероятно, правильный код, это плохая идея, и на самом деле это разрешено или поощрено некоторыми языками программирования, я не вижу прецедента, но я боюсь от программистов, которые его узнали. Очевидная причина для этого заключается в том, что переменные, локальные по отношению к внешней функции, видны во внутренней, это не так, как вы не можете передавать их в качестве параметров и делать с ними все, что вам нравится, поэтому использование этого метода означает, что есть проблема в понимании структурированного программирования, в то время как это очень сложная ** структура **. –
Да, это большая проблема? – JEl