2015-04-25 4 views
-2

Кто-нибудь видит ошибку здесь? У меня есть альтернативные решения.Код C для изменения строки

int main() 
{ 

    char line[100], res[100], temp[20]; 
    fgets(line, 100*sizeof(char), stdin);  
    int i, j, l; 
    for(i=strlen(line)-1; i>=0; i--) 
    { 
    if(line[i]==' ') 
     for(j=i+1, l=0; line[j]!=' ' && line[j]!='\0'; l++, j++) 
      temp[l]=line[j]; 
    temp[++l]=' '; 
    temp[++l]='\0'; 
    strcat(res, temp); 
    } 
    puts(res); 
    return 0; 
} 
+2

Пожалуйста, сообщите нам, какое поведение вы на самом деле видите и как оно отличается от ожидаемого поведения. – ChrisF

+0

Никогда не делайте этого 'for (i = strlen (line) -1; i> = 0; i -)', вы вычисляете длину строки 'length' строк, вы должны знать, что' strlen () 'перебирает символы для их подсчета. –

+0

'strcat (res, temp);' - это нехорошо. Вы никогда не устанавливаете 'res []' как завершенный буфер, а 'strcat' ожидает, что это так. Таким образом, охота находится, чтобы найти символ «0», и если вам (un) повезло, вы найдете один с достаточным пространством, оставшимся для фактической конкатенации исходной строки. – WhozCraig

ответ

0

л и J инициализированы только тогда, когда линия [я] ==» '.

Ведьма не будет иметь места для первой итерации, где линия [I] будет «\ п»

0

for и if петля не требуется. Поскольку массив следует индексированию на основе 0, i должен принимать значения от 0 до strlen(line)-1, поэтому j=i+1 должен быть j=i (строка 1). Строки должны иметь нулевой конец - строка 2. Кроме того, l уже увеличивается в for loop, поэтому вместо предварительного приращения используйте post-increment (или вообще не используйте его) (строка 3).

#include<stdio.h> 
#include<string.h> 
int main() 
{ 

char line[100], res[100], temp[20]; 
fgets(line, 100*sizeof(char), stdin); 
int i, j, l=0; 
res[0]='\0'; //line 2 
i=strlen(line)-1; 

    for(j=i, l=0; line[j]!=' ' && line[j]!='\0'; l++, j--) //line 1 
     {temp[l]=line[j]; 
     } 
    temp[l++]=' '; //line 3 (or temp[l]=' ') 
    temp[l++]='\0'; 

    strcat(res, temp); 

    puts(res); 
    return 0; 
} 
Смежные вопросы