2015-06-27 2 views
-2

Запишите код, чтобы отменить строку стиля C. (Строка в стиле C означает, что «abcd» представляется в виде пяти символов, включая нулевой символ.) Ничего не распечатывается. Зачем?Обратный текст в стиле C

void ReverseString(char *p){ 
    int length = strlen(p); 
    for (int i = 0, j = length; i < j; i++, j--){ 
     swap(p[i], p[j]); 
    } 

} 


int main() 
{ 
    char a[] = "12345"; 
    ReverseString(a); 
    cout << a; 
    system("pause"); 
    return 0; 
} 
+0

Что происходит с нулем? – Beta

+5

'j = length - 1' – AlexD

ответ

5

Вы поменять характер '\0' терминатор, который в конце вашей строки в самом начале. Таким образом, cout, который печатает до тех пор, пока не найдет первый символ \0, ничего не печатает. Используйте j = length - 1, чтобы исключить его.

Но еще лучше: Это уже реализовано в стандартной библиотеке:

void ReverseString(char *p) { 
    std::reverse(p, p + std::strlen(p)); 
} 

Это, как правило, очень хорошая идея использовать алгоритмы над ручной кода, поскольку он гораздо меньше ошибок и часто более эффективным.

-1
public class Reverse { 
    public static void main(String[] args) { 
    StringBuffer s = new StringBuffer("Xmen Logan"); 
    s.append('\0'); 

    System.out.println("C-style string---" + s); 

    reverse(s); 


    } 

    public static void reverse(StringBuffer s) { 
    int length = s.length(); 
    char[] chars = new char[length]; 

    int j = 0; 
    for(int i = length-1; i>=0; i--) { 
    chars[j++] = s.charAt(i); 

    } 

    String reverseString = new String(chars); 

    System.out.println("Reverse String ------" + reverseString); 

} 
} 
+2

Я думаю, вы пропустили тег C++ на вопрос! – JeffUK