Nilesh Sinha Ответов: 3

Заменить ПИ с 3.14


замена pi word на 3.14 .он показывает вывод,но заставляет меня закрыть программу, любая помощь по этому поводу будет оценена по достоинству.

Что я уже пробовал:

#include <iostream>
#include <vector>
#include <string>
#include<cstring>
#include <sstream>
using namespace std;
void swa(char b[]);
int main()
{
    char str[]="pi day is celebrated in march, pi day is on 14 march";
    swa(str);
}
void  swa(char b[])
{
    int i;
    char * str=new char();
    str=strtok(b," ");
    char *ptr1=new char();
    strcat(ptr1,str);
    strcat(ptr1," ");

    if(strcmp(str,"pi")==0)
    {
        ptr1="3.14 ";
       // cout<<ptr1<<" ";
    }
    if(str!=NULL)
    {
        cout<<ptr1;
        swa(b+strlen(str)+1);
    }
}

Afzaal Ahmad Zeeshan

Вы вообще не заменяете ПИ на 3.14.

Вы можете попробовать использовать replace функция для замены символов в строке на новый набор символов (строк).

Nilesh Sinha

Мой вопрос в основном заключается в том, чтобы написать функцию замены вместо использования встроенной функции замены.

3 Ответов

Рейтинг:
2

Member 14522494

#include<bits/stdc++.h>
using namespace std;
void replace(char input[],int start) 
{
	if(input[start]=='\0'||input[start+1]=='\0') // base condition if string 
                  return;             //contains no element or 1 element
                                       // there won't be 
                                      //any pi as               
                       
				    // pi contains 2 characters p i
		
replace(input,start+1);//Initially start would be at 0 and increment start
                      // by 1 in each 
                      //case to traverse whole string.
	
	if(input[start]=='p' && input[start+1]=='i')
	{
		for(int j=strlen(input)-1 ;j>=start+2 ;j--)
		{
			input[j+2]=input[j]; //Shift elements by two towards right as 
                                            //3.14 contains 2 more character than 
                                            //pi
		}
		input[start]='3'; 
		input[start+1]='.';
		input[start+2]='1';
		input[start+3]='4';
		input[strlen(input)+2]='\0';
	}
}
void replacePi(char input[])
{
	replace(input,0); 
}

int main()
{
char a[1000000];
cin>>a;
replacePi(a);
cout<<a;
}


Рейтинг:
17

CPallini

Почему вы используете C-как струна внутри C++ код?
Попробуй:

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string s = "pi day is celebrated in march, pi day is on 14 march";

  size_t pos = 0;

  while ( (pos = s.find("pi", pos)) != string::npos )
  {
    s.replace(pos,2, "3.14");
  }

  cout << s << endl;
}


Nilesh Sinha

Большое спасибо! :)

CPallini

Добро пожаловать.

Рейтинг:
0

OriginalGriff

Здесь есть масса проблем, начиная с prt1 не содержит достаточно места для данных, которые вы объединяете в него, но что еще более важно, вы даже близко не используете strtok правильно.
Посмотрите на документацию: strtok - ссылка на C++ [^] - он включает в себя пример того, как его использовать. Выбросьте этот код и начните снова, как только вы прочитаете документы и поймете, что делаете, вместо того, чтобы просто гадать и надеяться на лучшее!


Nilesh Sinha

Спасибо вам за предоставленную ссылку,я еще раз загляну в этот код.