我只想使用递归将字符“ a”替换为字符“ z”

时间:2019-10-25 10:01:49

标签: c++ function recursion definition c-strings

我是编程初学者,我想将此数组打印为字母“ a”应替换字母“ z”并打印更新的字符串

#include <iostream>
    char strng(char[],int);
    using namespace std;
    int main() {
        char s[]="all in all";
        int i=0;
        char result;
        //cout<< sizeof(s);
       result=strng(s,i);
       cout<<result;
        return 0;
    }
    char strng (char name[],int i) {
        if(!name){
            return (0) ;
        }
        else if(name[i]=='a'){
            name[i]='z';
            return (strng(name ,i++));
        }
    }

2 个答案:

答案 0 :(得分:1)

#include <iostream>
#include <string>
#include <cstring>

void replaceChar(char *ptr, int len){
  if(len == 0 ){
    if( (*(ptr+len)) == 'a' ){
      (*(ptr+len)) = 'z';
    }
  }
  else{
    if((*(ptr+len)) == 'a'){
      (*(ptr+len)) = 'z';
    }
    replaceChar(ptr, len-1);
  }
}


int main() {
  char str[] = "Mandar";
  puts(str);
  replaceChar(str,strlen(str) - 1);
  puts(str);
}

答案 1 :(得分:0)

您的函数实现太复杂且无效。

例如在此语句中

   if(!name){
        return (0) ;

需要检查name是否等于nullptr,而您需要检查name [i]是否等于终止符'\0'

   if(!name[i]){
        return (0) ;.

由于return语句中使用的后递增运算符

return (strng(name ,i++));

该函数在递增之前使用i的相同值进行调用。

该函数应返回指向修改后的字符串的指针,其返回类型应为char *

可以按照演示程序中所示的以下方式定义函数

#include <iostream>

char * replace_char( char *s, char source = 'a', char substitution = 'e' )
{
    if ( *s )
    {
        if ( *s == source ) *s = substitution;
        replace_char( s + 1, source, substitution );
    }       

    return s;
}

int main() 
{
    char s[]="all in all";  

    std::cout << s << '\n';
    std::cout << replace_char( s ) << '\n';

    return 0;
}

其输出为

all in all
ell in ell