Replace every character of string by character whose ASCII value is K times more than it

Given a string str consisting of lowercase letters only and an integer k, the task is to replace every character of the given string by character whose ASCII value is k times more than it. If ASCII value exceeds ‘z’, then start checking from ‘a’ in a cyclic manner.

Examples:

Input: str = “abc”, k = 2
Output: cde
a is moved by 2 times which results in character c
b is moved by 2 times which results in character d
c is moved by 2 times which results in character e

Input: str = “abc”, k = 28
Output: cde
a is moved 25 times, z is reached. Then 26th character will be a, 27-th b and 28-th c.
b is moved 24 times, z is reached. 28-th is d.
b is moved 23 times, z is reached. 28-th is e.



Approach: Iterate for every character in the string and perform the below steps for each character:

  • Add k to the ASCII value of character str[i].
  • If it exceeds 122, then perform a modulus operation of k with 26 to reduce the number of steps, as 26 is the maximum number of shifts that can be performed in a rotation.
  • To find the character, add k to 96. Hence the character with ASCII value k+96 will be the new character.

Repeat the above steps for every character of the given string.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to move every character
// K times ahead in a given string
#include <bits/stdc++.h>
using namespace std;
  
// Function to move string character
void encode(string s,int k){
  
    // changed string
    string newS;
  
    // iterate for every characters
    for(int i=0; i<s.length(); ++i)
    {
        // ASCII value
        int val = int(s[i]);
  
        // store the duplicate
        int dup = k;
  
        // if k-th ahead character exceed 'z'
        if(val + k > 122){
            k -= (122-val);
            k = k % 26;
            newS += char(96 + k);
        }
        else
            newS += char(val + k);
  
        k = dup;
    }
  
    // print the new string
    cout<<newS;
}
  
// driver code
int main(){
    string str = "abc";
    int k = 28;
  
    // function call
    encode(str, k);
  
    return 0;
}
  
// This code is contributed by Sanjit_Prasad

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to move every character 
// K times ahead in a given string 
  
class GFG {
  
// Function to move string character 
    static void encode(String s, int k) {
  
        // changed string 
        String newS = "";
  
        // iterate for every characters 
        for (int i = 0; i < s.length(); ++i) {
            // ASCII value 
            int val = s.charAt(i);
            // store the duplicate 
            int dup = k;
  
            // if k-th ahead character exceed 'z' 
            if (val + k > 122) {
                k -= (122 - val);
                k = k % 26;
                  
                newS += (char)(96 + k);
            } else {
                newS += (char)(val + k);
            }
  
            k = dup;
        }
  
        // print the new string 
        System.out.println(newS);
    }
  
// Driver Code 
    public static void main(String[] args) {
        String str = "abc";
        int k = 28;
  
        // function call 
        encode(str, k);
    }
}
  
// This code is contributed by Rajput-JI 

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to move every character 
# K times ahead in a given string 
  
# Function to move string character
def encode(s, k):
      
    # changed string 
    newS = ""
      
    # iterate for every characters
    for i in range(len(s)): 
          
        # ASCII value 
        val = ord(s[i]) 
          
        # store the duplicate 
        dup =
          
        # if k-th ahead character exceed 'z' 
        if val + k>122
            k -= (122-val) 
            k = k % 26
            newS += chr(96 + k) 
              
        else
            newS += chr(val + k) 
          
        k = dup 
      
    # print the new string 
    print (newS) 
              
# driver code     
str = "abc"
k = 28
  
encode(str, k)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to move every character 
// K times ahead in a given string 
using System;
public class GFG { 
  
// Function to move string character 
    static void encode(String s, int k) {
  
        // changed string 
        String newS = "";
  
        // iterate for every characters 
        for (int i = 0; i < s.Length; ++i) {
            // ASCII value 
            int val = s[i];
            // store the duplicate 
            int dup = k;
  
            // if k-th ahead character exceed 'z' 
            if (val + k > 122) {
                k -= (122 - val);
                k = k % 26;
                  
                newS += (char)(96 + k);
            } else {
                newS += (char)(96 + k);
            }
  
            k = dup;
        }
  
        // print the new string 
        Console.Write(newS);
    }
  
// Driver Code 
    public static void Main() {
        String str = "abc";
        int k = 28;
  
        // function call 
        encode(str, k);
    }
}
  
// This code is contributed by Rajput-JI 

chevron_right


PHP

122)
{
$k -= (122 – $val);
$k = $k % 26;
$newS = $newS.chr(96 + $k);
}
else
$newS = $newS.chr($val + $k);

$k = $dup;
}

// print the new string
echo $newS;
}

// Driver code

$str = “abc”;
$k = 28;

// function call
encode($str, $k);

// This code is contributed by ita_c
?>


Output:

cde

Time Complexity: O(N), where N is the length of the string.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.