简体   繁体   中英

I need help understanding the code for reversing a string

I need help understanding a function for reversing the array of string.

I have been looking through a few codes, and just trying to understand it. It is a function using a pointer.

void ReverseString(char *pStr){
    int length = 0;
    int i = 0;

    while(pStr[i]!='\0')
    {
        length++;
        i++;
    }

    for (int i = 0; i < length / 2; i++) {
        char temp = pStr[length - i - 1] ;
        pStr[length - i - 1] = pStr[i];
        pStr[i] = temp;
    }
}

I am expecting it to reverse a string; I have a main function that uses it.

Strings in C are sequences of characters terminated with a zero character '\\0' .

So this loop

while(pStr[i]!='\0')
{
    length++;
    i++;
}

calculates the length of the string that is how many characters there are in the string before the zero character. Instead of the loop you could use standard C function strlen declared in header <string.h> .

This loop

for (int i = 0; i < length / 2; i++) {
    char temp = pStr[length - i - 1] ;
    pStr[length - i - 1] = pStr[i];
    pStr[i] = temp;
}

swaps character from the first half of the string with characters of the second half of the string. That is the first character is swapped with the last character, the second character is swapped with the before last character and so on until the middle of the string.

The function has several drawbacks. It could be written (without using standard C functions) the following way

#include <stdio.h>

char * ReverseString( char *pStr )
{
    size_t n = 0;

    // Calculates the number of characters in the string 
    // excluding the zero character.
    // SO the variable n will contain the number of characters in the string. 
    while ( pStr[n] != '\0' ) ++n;

    // Swaps characters from the first half of the string with 
    // the characters of the second half of the string.
    // So the loop has only n / 2 iterations. 
    for ( size_t i = 0; i < n / 2; i++ ) 
    {
        char c = pStr[n - i - 1] ;
        pStr[n - i - 1] = pStr[i];
        pStr[i] = c;
    }

    return pStr;
}

int main( void ) 
{
    char s[] = "Prachi Rajesh Jansari";

    puts( s );
    puts( ReverseString( s ) );
}

The program output is

Prachi Rajesh Jansari
irasnaJ hsejaR ihcarP

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM