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.



Improved By : Sanjit_Prasad, Rajput-Ji, Ita_c