递归程序用给定字符串中的3.14替换所有出现的pi

2021年4月23日17:11:08 发表评论 1,215 次浏览

本文概述

这个任务是写一个递归函数来替换所有出现在给定字符串中的pi为3.14,并打印修改后的字符串

例子:

输入:str ="pippppiiiipi"
输出:3.14ppp3.14iii3.14
输入:str ="pip"
输出:3.14p
输入:str ="xpix"
输出:x3.14x

我们在这里讨论了一个迭代函数

方法:

  • 如果字符串中只有一个字符或该字符串为空, 则中断递归调用
  • 否则, 你自己保留字符串的第一个字符, 然后将字符串的其余部分传递给递归。
    • 如果第一个字符不是" p", 则只需将该字符放在递归答案的前面
    • 否则, 如果第一个字符为" p"并且传递给递归的零件的第一个字符为" i", 则将" pi"替换为" 3.14"

下面是上述方法的实现:

C ++

//A recursive C++ program to replace
//all pi in a given string with 3.14
#include <bits/stdc++.h>
using namespace std;
 
//Recursive Function to replace all
//occurrences of pi in a given
//with 3.14
void replacePiHelper( char str[], int start)
{
 
     //Base condition
     //if the string is empty
     //or of length one
     if (str[start] == '\0' || str[start] == '\0' ) {
         return ;
     }
 
     //Getting the answer from
     //recursion for the smaller
     //problem
     replacePiHelper(str, start + 1);
 
     //Small calculation part
     //if the first character is 'p'
     //and the first character of the part
     //passed to recursion is 'i' then replace
     //"pi" with "3.14"
     if (str[start] == 'p' && str[start + 1] == 'i' ) {
 
         //Shifting the characeters to
         //right side to put 3.14 in
         //the character array
         for ( int i = strlen (str); i>= start + 2; i--) {
             str[i + 2] = str[i];
         }
 
         //Replacing with "3.14"
         str[start] = '3' ;
         str[start + 1] = '.' ;
         str[start + 2] = '1' ;
         str[start + 3] = '4' ;
     }
}
 
//Function to replace pi with 3.14
void replacePi( char str[])
{
     replacePiHelper(str, 0);
}
 
//Driver code
int main()
{
     char str[] = "pippppiiiipi" ;
 
     //Function call
     replacePi(str);
 
     cout <<str;
 
     return 0;
}

Java

//A recursive Java program to replace
//all pi in a given string with 3.14
 
class GFG {
 
     //Recursive Function to replace all
     //occurrences of pi in a given
     //with 3.14
     public String replacePi(String str)
     {
         //base condition
         //if the string is empty
         //or of length one
         if (str.length() <= 1 ) {
             return str;
         }
 
         //if the first character is 'p'
         //and the first character of the part
         //passed to recursion is 'i' then replace
         //"pi" with "3.14"
         if (str.charAt( 0 ) == 'p' && str.length()>= 2
             && str.charAt( 1 ) == 'i' ) {
             return "3.14" + replacePi(str.substring( 2 , str.length()));
         }
 
         //if the first character is not 'p'
         //then just put that character in
         //front of the answer which came
         //from recursion
         return str.charAt( 0 ) + replacePi(str.substring( 1 , str.length()));
     }
 
     //Driver Code
     public static void main(String args[])
     {
         GFG g = new GFG();
         String str = "pippppiiiipi" ;
         System.out.println(g.replacePi(str));
     }
}

Python3

# A recursive Python3 program to replace
# all pi in a given string with 3.14
 
# Recursive Function to replace all
# occurrences of pi in a given
# with 3.14
def replacePieHelper(string, start):
 
     # Base condition
     # if the string is empty
     # or of length one
     if len (string) <2 or start = = len (string):
         return string
 
     # Getting the answer from
     # recursion for the smaller
     # problem
     replacePieHelper(string, start + 1 )
 
     # Small calculation part
     # if the first character is 'p'
     # and the first character of the part
     # passed to recursion is 'i' then replace
     # "pi" with "3.14"
     if (string[start] = = 'p' and
        string[start + 1 ] = = 'i' ):
 
         # Replacing with "3.14"
         string[start:start + 2 ] = [ '3' , '.' , '1' , '4' ]
 
# Function to replace pi with 3.14
def replacePi(string):
     replacePieHelper(string, 0 )
 
# Driver Code
if __name__ = = "__main__" :
     string = "pippppiiiipi"
 
     string = list (string)
 
     # Function call
     replacePi(string)
 
     string = ''.join(string)
     print (string)
 
# This code is contributed by
# sanjeev2552

C#

//A recursive C# program to replace
//all pi in a given string with 3.14
 
using System;
class gfg {
     //Recursive Function to replace all
     //occurrences of pi in a given
     //with 3.14
     public String replacePi(String str)
     {
         //base condition
         //if the string is empty
         //or of length one
         if (str.Length <= 1) {
             return str;
         }
 
         //if the first character is 'p'
         //and the first character of the part
         //passed to recursion is 'i' then replace
         //"pi" with "3.14"
         if (str[0] == 'p' && str.Length>= 2
             && str[1] == 'i' ) {
             return "3.14" + replacePi(str.Substring(2, str.Length - 2));
         }
 
         //if the first character is not 'p'
         //then just put that character in
         //front of the answer which came
         //from recursion
         return str[0] + replacePi(str.Substring(1, str.Length - 1));
     }
}
 
//Driver Code
class geek {
     public static int Main()
     {
         gfg g = new gfg();
         string input = "pippppiiiipi" ;
         Console.WriteLine(g.replacePi(input));
         return 0;
     }
}

输出如下

3.14ppp3.14iii3.14

另一种方法:

一种简单的递归方法, 用" 3.14"替换给定函数中的所有pi。首先声明函数, 我们不需要任何辅助函数。

  • 如果字符串为空或字符串的长度为1, 则返回字符串。
  • 如果字符串的第0个元素和第1个元素是p, 并且我们必须处理它们的其余部分, 则必须调用递归, 它将给出结果。
  • 如果不是, 那么我们必须从1st调用递归到所有元素, 然后将递归结果添加到1st元素并返回它。

下面是上述方法的实现:

python

# Python program for above approach
 
# A simple recursive approach
# to replace all
# pi in a given function with "3.14"
# Firstly function is declared we don't
# need any helper function one
# function is enough
def replacePi(string):    
     
     # Base case if string is empty
     # or length of string is 1
     # return the string
     if len (string) = = 0 or
                      len (string) = = 1 :
         return string
     
     # If the 0th and 1st element
     # of string are p
     # and i we have to handle them
     # for rest we have to call
     # recursion it will give the result
     if string[ 0 ] = = 'p' and string[ 1 ] = = 'i' :
       
         # Smalloutput is a variable
         # used to store recursion result
         smallOutput = replacePi(string[ 2 :])   
         
         # And we have to add the recursion
         # result with the first part we
           #handeled and return the answer
         return "3.14" + smallOutput            
     else :
         
         # If not then we have to call
         # recursion from 1st to all elements
         # then add recursion result to
         # 1st element and return it
         smallOutput = replacePi(string[ 1 :])
         return string[ 0 ] + smallOutput
       
# Driver code
if __name__ = = "__main__" :
 
   string = "pipppiiipi"
 
   # Function call
   result = replacePi(string)
   print result

C#

//C# program for above approach
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
 
class GFG{
 
//A simple recursive approach
//to replace all pi in a given
//function with "3.14". Firstly
//function is declared we don't
//need any helper function one
//function is enough
static string replacePi( string s)
{
     
     //Base case if s is empty
     //or length of s is 1
     //return the s
     if (s.Length == 0 || s.Length == 1)
         return s;
      
     //If the 0th and 1st element
     //of s are p and i we have to
     //handle them for rest we have
     //to call recursion it will
     //give the result
     if (s[0] == 'p' && s[1] == 'i' )
     {
         
         //Smalloutput is a variable
         //used to store recursion result
         string smallOutput = replacePi(s.Substring(2));   
         
         //And we have to add the recursion
         //result with the first part we
         //handeled and return the answer
         return "3.14" + smallOutput;
      
     }
     else
     {
         
         //If not then we have to call
         //recursion from 1st to all elements
         //then add recursion result to
         //1st element and return it
         string smallOutput = replacePi(s.Substring(1));
         return s[0] + smallOutput;
     }
}
 
//Driver Code
public static void Main( string [] args)
{
     string s = "pipppiiipi" ;
     
     //Function call
     string result = replacePi(s);
     Console.Write(result);
}
}
 
//This code is contributed by rutvik_56

输出如下:

3.14pp3.14ii3.14

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: