2014-10-14 3 views
0
void decode(char *str, int j) 
{ 
int i; 
char s[100]=""; 
i = strlen(str); 
//Print each uppercase character in the string 
if(j<i) 
{ 
    if(isupper(str[j])) 
    { 
     strcat(&str[j], s); 
     j++; 
     decode(str, j); 
    } 
    else 
    { 
     j++; 
     decode(str, j); 
    } 
} 
else 
    printf("%s\n", s); 
} 

Эта функция предназначена для печати только символов верхнего регистра из str (аргумент). Но все, что он печатает в настоящее время, - пустое место. Что-то явно не соответствует моему пониманию strcat. Я не уверен, работает ли это так для массива char, который я объявлял наверху, например. будет ли он до сих пор прилагаться к нему, хотя он объявлен пустым? Если я вычеркнул пустое объявление для массива char, оно все равно печатает пустым. Любая помощь приветствуется.Включить пустую строку в C?

+2

Проверьте свой аргумент на 'strcat'. –

+0

@OliverCharlesworth прав, проверьте определение strcat: '' void strcat (char * dest, char * src) { while (* dest) dest ++; while (* dest ++ = * srC++); } '' –

+0

У меня было по-другому, и по какой-то причине он по-прежнему печатал просто пустое место. – bibzuda7

ответ

0

if j < i вы напечатаете s, который объявлен в стеке и всегда пуст, когда запускается функция. Вы можете попробовать передать его функции декодирования. Хотя лучше было бы перебирать строку вместо использования рекурсии.

+0

Я должен использовать рекурсию для этого, к сожалению. Кроме того, J является 0, объявленным в основном, поэтому он не обновляется во время рекурсивного вызова, а i всегда больше 0. Это просто, чтобы убедиться, что он проверяет каждый символ в строке. – bibzuda7

+0

OH Я понял! Большое спасибо, я понимаю, что я сделал не так. Мне нужно объявить другую строку снаружи, чтобы она не обновлялась во время рекурсии. Спасибо! – bibzuda7

+0

После объявления его вне функции и передачи его в качестве аргумента, он печатает всю строку, а не только верхний регистр. – bibzuda7

Смежные вопросы