Results 1 to 4 of 4

Thread: tring function

  1. #1

    Thread Starter
    Lively Member muralidhary's Avatar
    Join Date
    Aug 2001
    Location
    Chennai
    Posts
    89

    tring function

    hello
    can anyone write me a function for string reversal
    without using string functions and without using a temporary
    character array
    to store the reversed string

  2. #2
    Frenzied Member HarryW's Avatar
    Join Date
    Jan 2000
    Location
    Heiho no michi
    Posts
    1,827
    This code will only work in release mode if you're using VC++6. I don't know why, but VC++6 probably protects memory writes to make debugging easier or something. Anyway it works in release mode.

    Code:
    #include <iostream>
    
    char *revstr(char *str)
    {
    	int length = strlen(str)-1;
    	char *pstrstart = str; 
    	char *pstrend = str + length;
    
    	while((pstrend - pstrstart) > 0)
    	{
    		//swap characters
    		*pstrstart = *pstrstart ^ *pstrend;
    		*pstrend   = *pstrstart ^ *pstrend;
    		*pstrstart = *pstrstart ^ *pstrend;
    		pstrstart++;
    		pstrend--;
    	}
    
    	return str;
    }
    
    
    int main()
    {
    	char *str = "abcde";
    	std::cout << "revstr(\"abcde\") => " << revstr(str) << std::endl;
    	
    	return 0;
    }
    Harry.

    "From one thing, know ten thousand things."

  3. #3
    Frenzied Member HarryW's Avatar
    Join Date
    Jan 2000
    Location
    Heiho no michi
    Posts
    1,827
    Oops, just realised I had a string function in there (strlen).

    Here's the alternative:

    Code:
    #include <iostream>
    
    char *revstr(char *str)
    {
    	char *pstrstart = str; 
    	char *pstrend = str;
    	while(*(pstrend+1) != '\0')
    		pstrend++;
    
    	int length = pstrend - pstrstart-1;
    	
    	while((pstrend - pstrstart) > 0)
    	{
    		//swap characters
    		*pstrstart = *pstrstart ^ *pstrend;
    		*pstrend   = *pstrstart ^ *pstrend;
    		*pstrstart = *pstrstart ^ *pstrend;
    		pstrstart++;
    		pstrend--;
    	}
    
    	return str;
    }
    
    
    int main()
    {
    	char *str = "abcde";
    	std::cout << "revstr(\"abcde\") => " << revstr(str) << std::endl;
    	
    	return 0;
    }
    Harry.

    "From one thing, know ten thousand things."

  4. #4

    Thread Starter
    Lively Member muralidhary's Avatar
    Join Date
    Aug 2001
    Location
    Chennai
    Posts
    89

    thanks

    thank you HarryW

    it is fine

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width