2013-04-01 2 views
1

Я написал код, чтобы изменить строкуреверс строки: Garbage значения

#include <iostream> 
#include <cstring> 

using namespace std; 

string Reversal(char * s); 

int main() 
{ 
    char str[25]; 

    cout << "Enter a Name :"; 

    cin.get(str, 25); 
    cout << "You have entered: " << str; 

    cout << "\nReversed : " << Reversal(str); 
    return 0; 
} 

string Reversal(char * s) 
{ 
    int count = strlen(s); 
    char temp[count]; 
    for (int i = 0; i < count; i++) 
    { 
     temp[i] = * (s + (count - 1) - i); 
    } 
    return temp; 
} 

сослался ссылка ниже, чтобы CIN принять пробельные в качестве входных данных:

How to cin Space in c++?

Но выход показывая несколько нежелательных персонажей? Любое предложение, почему так? enter image description here

ответ

4

Когда вы неявно построить std::string из temp, последний, как ожидается, будет NUL завершающим, что это не так.

Изменить

return temp; 

в

return std::string(temp, count); 

Это использует другой конструктор, который принимает один явный подсчет символов и не ожидает temp быть NUL завершающим.

2

Последний символ в массиве temp должен иметь нулевое завершение. Сделайте это на 1 дольше, чем размер вашей входной строки. Сделайте последний символ нулевым символом ('\0').

string Reversal(char *s) 
{ 
int count=strlen(s); 
char temp[count+1]; //make your array 1 more than the length of the input string 
for (int i=0;i<count;i++) 
{ 
    temp[i]= *(s+(count-1)-i); 
} 

temp[count] = '\0'; //null-terminate your array so that the program knows when your string ends 
return temp; 
} 

Нулевой символ указывает конец строки. Обычно это байт со всеми 0 битами. Если вы не укажете это как последний символ вашего массива temp, программа не будет знать, когда будет конец вашего массива символов. Он будет содержать в себе каждый персонаж, пока не найдет '\0'.

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