Monday, April 3, 2017

Reverse all words in a string

#include<string.h>
#include<iostream>

using namespace std;

void reverse(char * str, int start, int end) {

    while(start < end) {
        char tmp =  *(str + start);
        str[start++] = str[end];
        str[end--] = tmp;
    }
}

void reverse_words(char * str) {
    int start = 0;
    int end = 0;
    int len = strlen(str);

    start = 0;
    for (int i = 0; i <= len; i++) {
        if( *(str + i) != ' ' && *(str + i) != 0){
            continue;
        }
        end = i - 1;
        reverse(str, start, end);
        start = i + 1;
    }
}

int main()
{
    char str[] = "This is a string to be reversed";

    std::cout<<"\n The original string is : " << str;

    reverse_words(str);

    std::cout <<"\n The string after reversing is : " << str;
    std::cout<<"\n";

    return 0;
}

Replace all spaces in a string with "%20".Assume the string is big enough to accomodate extra characters

#include <iostream>
#include <string.h>

using namespace std;

void replace_str(char * str) {

    int count = 0;
    int len = strlen(str);

    for (int i = 0 ; i < strlen(str) ; i++) {
        if(str[i] == ' ') {
            count++;
        }
    }

    int newlen = count*2 + len;

    while(len >= 0) {

        if(str[len] != ' ') {
            str[newlen] = str[len];
            newlen--;
            len--;
        } else {
            str[newlen]='0';
            str[newlen - 1]='2';
            str[newlen - 2]='%';
            newlen -= 3;
            len--;
        }
    }

    cout<<"\n The new string is : "<<str<<endl;
}

int main()
{
    char str[100] = "This is a string";

    replace_str(str);

    return 0;
}