2011-12-20 2 views
2

Итак, после нескольких лет бездействия после изучения в uni, я пытаюсь создать свой опыт с помощью простого реверсора строк.Проблемы с простой задачей c

вот мой код:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
/* 
* 
*/ 
int main(int argc, char** argv) { 
reverser(); 
return(0); 
} 

int reverser(){ 
printf("Please enter a String: "); 
//return (0); 
int len; 
char input[10]; 
scanf("%s",&input); 
int quit = strcmp(input,"quit"); 
if(quit == 0){ 
    printf("%s\n","Program quitting"); 
    return(0); 
} 



len = strlen(input); 
printf("%i\n",len); 

char reversed[len]; 

int count = 0; 

while (count <= (len-1)){ 
    //printf("%i\n",(len-count)); 
reversed[count] = input[(len-1)-count]; 
count++; 
} 


//printf("%s\n",input); 
printf(reversed); 
printf("\n"); 
reverser(); 


} 

Когда я ввода "привет", можно было бы ожидать "olleh" в качестве ответа, но я получаю "olleh: $ а ча & @",

Как мне просто вернуть строку и вернуть ее?

Bombalur

+0

Вы добавили завершающий нуль в конец перевернутой строки? т. е. '\ 0'? –

+1

Вы забываете, что строки заканчиваются нулевым байтом. Вам нужно добавить этот ноль после последнего символа в 'reverseed' – pmg

ответ

2

Строки обычно заканчиваются нулевым байтом. Так оно и должно быть

char reversed[len+1]; 

И вы должны очистить последние байты

reversed[len] = (char)0; 
3

Добавить '\ 0' в конце массива. (как и в, скопируйте только символы, пока не достигнете «\ 0» - это точка в массиве [strlen (array)], затем, когда вы закончите, добавьте «\ 0» к следующему символу)

0

Это потому, что вы создаете массив с размером 10 Когда вы берете в него некоторые данные (используя scanf), и массив не заполняется полностью, printf из этого массива будет давать значения нежелательной памяти в памяти. Вы должны перебирать длину ввода, проверяя \ n.

0

должен иметь размер + 1 до длины строки, так что вы можете иметь \ 0 в конце строки, которая будет решать ваши проблемы

0

Ниже (простая и минимальная реализация) строка обратной программы (очевидно, условия ошибки, угловые случаи, пробелы, более широкие наборы символов и т. д. не рассматривались).

#include <stdio.h> 

int strlen(char *s) 
{ 
    char *p = s; 
    while (*p) 
     p++; 
    return p - s; 
} 

char * strrev(char a[]) 
{ 
    int i, j; 
    char temp; 

    for (i=0, j=strlen(a)-1 ; i<j ; i++, j--) { 
     temp = a[i]; 
     a[i] = a[j]; 
     a[j] = temp; 
     } 

    return a; 
} 

int main() 
{ 
    char str[100]; 

    printf("Enter string: "); 
    scanf("%s", str); 

    printf("The reverse is %s \n", strrev(str)); 

    return 0; 
} 

Надеюсь, это поможет!

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