Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Runtime Error SIGSEGV

Estas en el tema de Runtime Error SIGSEGV en el foro de C/C++ en Foros del Web. hola quiero saber que tiene mi codigo para que me salga Runtime Error SIGSEGV, ya que estoy haciendo un problema de tju online contest (http://acm.tju.edu.cn/toj/showp2806.html)y ...
  #1 (permalink)  
Antiguo 03/10/2010, 19:01
 
Fecha de Ingreso: enero-2008
Ubicación: Oruro
Mensajes: 50
Antigüedad: 16 años, 3 meses
Puntos: 0
Runtime Error SIGSEGV

hola quiero saber que tiene mi codigo para que me salga Runtime Error SIGSEGV, ya que estoy haciendo un problema de tju online contest (http://acm.tju.edu.cn/toj/showp2806.html)y me sale Runtime Error SIGSEGV ,pero en mi pc anda bien con todas la entradas
-------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string reemp(string a,string b,string c){
string d;
int max=a.size()-b.size();
for(int i=0;i<=max;i++){
d=a.substr(i,b.size());
if(b.compare(d)==0)
a.replace(i,b.size(),c);
}
return a;
}

int main(){
string a,c,d;
vector <string> cont;
int i;
getline(cin,c);
getline(cin,d);
while(getline(cin,a))
cont.push_back(a);
for(i=0;i<cont.size();i++){
if(cont[i].size()>=c.size())
cont[i]=reemp(cont[i],c,d);
}
i=0;
while(i<cont.size()){
cout<<cont[i]<<endl;
i++;
}
cout<<endl;
return 0;
}
----------------------------------------------------------------------------------------------------
nota:en el problema dice que por linea hasta 1000 caracteres y el string puede contener mas de eso.
bueno espero puedan ayudarme gracias por leer el mensaje.
saludos^^.
  #2 (permalink)  
Antiguo 04/10/2010, 18:11
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Runtime Error SIGSEGV

Me parece que no tomas en cuenta que la cadena a buscar puede aparecer una o varias veces en la misma línea (reemp), además podrías evitar el uso del vector.

Ejemplo:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. void replaceAll(string &s, const string &what, const string &with){
  6.     string::size_type start = 0;
  7.     string::size_type whatsz = what.size();
  8.     string::size_type withsz = with.size();
  9.  
  10.     while(start = s.find(what, start), start != string::npos){
  11.         s.replace(start, whatsz, with);
  12.         start += withsz;
  13.     }
  14. }
  15.  
  16. int main(){
  17.  
  18.     string what, with;
  19.  
  20.     getline(cin, what);
  21.     getline(cin, with);
  22.  
  23.     string line;
  24.     while(getline(cin, line)){
  25.         replaceAll(line, what, with);
  26.         cout << line << endl;
  27.     }
  28.  
  29.     return 0;
  30. }

Saludos.
  #3 (permalink)  
Antiguo 04/10/2010, 18:49
 
Fecha de Ingreso: enero-2008
Ubicación: Oruro
Mensajes: 50
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Runtime Error SIGSEGV

utilice el vector por que pense que la entrada podria ser mayor al tamaño maximo que puede tener un string ya que pensaba primero almacenarlo pero ahora veo que lo pude hacer mas rapido como voz , y probando con el caso que me dices , si es una linea cambia las palabras pero si dos o mas lineas termina inesperadamente ,gracias por la ayuda fightmx me sirvio mucho tu respuesta, y gracias por el codigo tambien el resolver el string cada vez que se ingresa me servira de mucho antes no razonba asi y aparte vere como se utlizan el string::size_type y string ::npos.
gracias nuevamente ,saludos ^^.

Última edición por geforcefx; 04/10/2010 a las 18:55
  #4 (permalink)  
Antiguo 05/10/2010, 10:25
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Runtime Error SIGSEGV

Que bien, si quieres obtener el número máximo de caracteres que soporta un string utiliza max_size, aunque por lo general podrás almacenar tantos caracteres como memoria disponible tenga el programa. Como ves, es muy poco almacenamiento para el string de este ejercicio.
  #5 (permalink)  
Antiguo 05/10/2010, 12:54
 
Fecha de Ingreso: enero-2008
Ubicación: Oruro
Mensajes: 50
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Runtime Error SIGSEGV

si lo vi el max size y es harto, para no abrir otro tema jeje quisiera me expliques esta linea
while(start = s.find(what, start), start != string::npos)
primero se asigna un valor a start y el segundo es la condicional ?
yo hice la prueba con algo sencillo asi:
-------------------------------------------------------
#include <iostream>
using namespace std;
int main(){
int a,i=0;
cin>>a;
while(i=i+1,a!=0)
a-=i;
cout<<a<<endl;
system("pause");
return 0;
}
---------------------------------------
pero si el valor de a es mayor a 3 tarda harto.
saludos^^.
PD:y bueno comentarte que ya solucione mi codigo y el problema fue como dijiste ,lo solucione actualizando la variable max cada vez que reemplazaba una palabra.

Última edición por geforcefx; 05/10/2010 a las 13:23
  #6 (permalink)  
Antiguo 05/10/2010, 16:38
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Runtime Error SIGSEGV

Así es, el operador coma lo puedes usar para separar 2 ó más expresiones en lugar de una sola expresión. Además, cuando el conjunto de expresiones tiene que ser evaluado se considera solo el valor de la expresión que se encuentra más a la derecha. Dos cosas más: no confundir el operador coma con la coma que se utiliza para separar parámetros de funciones; y segundo, toma en cuenta que su uso regularmente obedece a circunstancias específicas, es decir, cuando varias cosas tienen que hacerse en una línea de código (por razones sintácticas), pero tratando de no sacrificar la legibilidad del código abusando del operador.

Ejemplo:
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. int main(){
  6.    
  7.     int a, b;
  8.     a = (b = 5, b - 2);
  9.     cout << "a = " << a << endl; // > a = 3
  10.     return 0;
  11. }

Etiquetas: runtime
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:35.