Prueba de máquina preguntas reales eliminar subcadena coincidente

De hecho, es el problema de hacer coincidir las subcadenas. Puede usar string :: find () y string :: erase () en STL, y ha escrito el suyo.

 

#include <iostream> 
#include <stdio.h> 
#include <string> 
usando el espacio de nombres std; 

cuerda s; 
string ss; 

bool cmp (int index) { 
	int i = 0; 
	para (; i <ss.size () && index <s.size (); index ++, i ++) { 
		if (s [index]! = ss [i]) 
			return false; 
	} 
	if (i == ss.size ()) 
		devuelve verdadero; 
	de lo contrario 
		devuelve falso; 
} 

string charge () { 
	string str = ""; 
	for (int i = 0; i <s.size ();) { 
		if (s [i] == ss [0] && cmp (i)) { 
			i = i + ss.size (); 
		} 
		else { 
			str + = s [i]; 
			i ++; 
		} 
	} 
	return str;

int main () { 
	cin >> s >> ss; 
	cout << charge () << endl; 
} 

 

Si usa la función find y la función earse en la cadena, se puede resolver más rápido;

Sin embargo, debe tenerse en cuenta que la función find () devuelve string :: nops cuando no puede encontrarlo. No puede simplemente usar el criterio booleano, esto debe tenerse en cuenta;

#include <iostream> 
#include <string> 
usando el espacio de nombres estándar; 

cadena s1, s2; 

int main () { 
	cin >> s1 >> s2; 
	while (s1.find (s2,0)! = string :: npos) { 
		int index = s1.find (s2); 
		cout << index << endl; 
		s1.erase (index, s2.size ()); 
	} 
	cout << s1 << endl; 
}

  

Supongo que te gusta

Origin www.cnblogs.com/songlinxuan/p/12676314.html
Recomendado
Clasificación