字符替换不起作用

时间:2017-12-11 17:31:36

标签: c++

enter image description here我有以下代码应该用单词“pi”替换pi(3.14)的实例。例如,“x3.14 3.14 3.14xx”应该变成“xpi pi pixx”。但是,我的代码没有这样做;为什么它不起作用,我将如何解决它?

#include<iostream>
#include<cstring> //dsfsdf
#include<string>
#include<cstdio>//sdfdsf
using namespace std;

void replacepi(char *arr,int i)
{
    //base
    if(arr[i]=='\0')
    {
        cout<<arr<<endl;
        return;
    }
    //recc 
    if(arr[i]=='3' && arr[i+1]=='.' && arr[i+2]=='1' && arr[i+3]=='4')
    {
        arr[i]='p';
        arr[i+1]='i';
        for(int j=i+4;arr[j]!='\0';j++)
            arr[j-2]=arr[j];
        arr[strlen(arr)-2]='\0';    
    }
    replacepi(arr,i+1);    
}

int main() {
    long int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        char arr[1000];
        cin.getline(arr,sizeof(arr));
        replacepi(arr,0);
    }
    return 0;
} 

1 个答案:

答案 0 :(得分:1)

看起来像regex_replace的工作。鉴于您已将输入读入arr,您可以将替换转储到控制台,如下所示:

regex_replace(ostream_iterator<char>(cout), cbegin(arr), cend(arr), regex("3\.14"), "pi")

Live Example

自然arr应该是string,而不是char[],因为任何大小char[]输入可能更大,{{1}将永远有效。