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

[SOLUCIONADO] array de wstring

Estas en el tema de array de wstring en el foro de C/C++ en Foros del Web. Hola a todos, normalmente no trabajo programando en c++, pero me han pedido que modifique un programa que ya funciona para obtener una estadistica. Hace ...
  #1 (permalink)  
Antiguo 10/06/2015, 15:02
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
array de wstring

Hola a todos,
normalmente no trabajo programando en c++, pero me han pedido que modifique un programa que ya funciona para obtener una estadistica. Hace tiempo que hice un curso en c++, recuerdo que se puede utilizar un array de strings, se podria utilizar también con wstring?

Sería correcto el siguiente código:

Código:
int dim=0;
wstring ErrorInfo; // codigo original
wstring ErrorList[dim];

while (m_dT < upToTime){

           ErrorInfo = getInfoString();   // codigo original
           ErrorList[dim] = ErrorInfo;
           dim++;
}
  #2 (permalink)  
Antiguo 11/06/2015, 00:06
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: array de wstring

No sería correcto porque...

Código C++:
Ver original
  1. int dim=0;
  2.  wstring ErrorList[dim];

Estás creando un array de tamaño 0.

Ya que estás con C++ yo creo que es mejor opción usar un contenedor:

Código C++:
Ver original
  1. wstring ErrorInfo; // codigo original
  2. std::vector< wstring > ErrorList;
  3.  while (m_dT < upToTime)
  4. {
  5.    ErrorInfo = getInfoString();   // codigo original
  6.    ErrorList.push_back( ErrorInfo );
  7. }
  8.  
  9. // Llegados a este punto puedes recuperar los mensajes
  10. // iterando sobre ErrorList como si fuese un array:
  11. for( size_t i = 0; i < ErrorList.size( ); ++i )
  12.   std::wcout << ErrorList[ i ] << std::endl;
Un saludo
  #3 (permalink)  
Antiguo 11/06/2015, 13:03
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: array de wstring

Gracias, lo voy a probar.
  #4 (permalink)  
Antiguo 16/06/2015, 02:32
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: array de wstring

Gracias ha funcionado.

Lo unico que con std::vector< wstring > no puedo comparar los mensajes directamente.
  #5 (permalink)  
Antiguo 16/06/2015, 02:53
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: array de wstring

Cita:
Iniciado por valentz Ver Mensaje
Gracias ha funcionado.

Lo unico que con std::vector< wstring > no puedo comparar los mensajes directamente.
¿No puedes?

Código C++:
Ver original
  1. std::vector< wstring > lista;
  2. lista.push_back( L"A" );
  3. lista.push_back( L"B" );
  4. lista.push_back( L"A" );
  5.  
  6. for( size_t i=0; i < lista.size( ) - 1; ++i )
  7. {
  8.   for( size_t j = i+1; j < lista.size( ); ++j )
  9.   {
  10.     if( lista[ i ] == lista[ j ] )
  11.     {
  12.       std::wcout << L"coincidencia: " << lista[ i ] << "=" << lista[j] << std::endl;
  13.     }
  14.   }
  15. }
  #6 (permalink)  
Antiguo 16/06/2015, 03:28
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: array de wstring

Perdon, claro que se puede.

Gracias por el ejemplo.
  #7 (permalink)  
Antiguo 24/06/2015, 14:49
 
Fecha de Ingreso: abril-2012
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: array de wstring

He creado sin ningún problema los vectores, así como la comparación de mensajes dentro de un vector. En el primer vector funciona correctamente pero en mi segundo vector el ultimo elemento el for lo ignora, alguien sabria decirme porque?

Código:
vector<wstring> m_vChoralList; 
vector<wstring> m_vImpEulList;
vector<wstring> m_vCompleteList;

// Estadistica de los mensajes de error
	
// Comparando los elementos de la lista Choral:
vector<int> n_vTimesStepReduction;
vector<int> n_vDominateError;
for(size_t i=0; i<m_vChoralList.size() - 1; ++i){
	int m_nTimes=1;
	for(size_t j=i+1; j<m_vChoralList.size(); ++j){
        // if two messages are equal then
		if(m_vChoralList[i] == m_vChoralList[j]){
			m_nTimes+=1;
			m_vChoralList.erase(m_vChoralList.begin()+j);
			--j;
		}
	}
	n_vTimesStepReduction.push_back(m_nTimes);
	n_vDominateError.push_back(m_nTimes);
}

// Comparando los elementos del vector ImpEul:
for(size_t k=0; k<m_vImpEulList.size() - 1; ++k){
	int m_TimesDominate=1;
	for(size_t l=k+1; l<m_vImpEulList.size(); ++l){
// if two messages are equal then
		if(m_vImpEulList[k] == m_vImpEulList[l]){
			m_TimesDominate+=1;
			m_vImpEulList.erase(m_vImpEulList.begin()+l);
			--l;
		}
	}
	n_vTimesStepReduction.push_back(0);
	n_vDominateError.push_back(m_TimesDominate); 
}
El tamaño del vector n_vTimesStepReduction tendria que ser la suma de los tamaños del vector m_vChoralList y m_vImpEulList, por ejemplo supongamos que uno tiene 9 elementos y el otro tiene 5 elementos, n_vTimesStepReduction debería tener 14 elementos y solo crea 13 elemenos, lo mismo ocurre con n_vDominateError. Alguna sugerencia?
  #8 (permalink)  
Antiguo 25/06/2015, 01:06
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: array de wstring

El vector n_vTimesStepReduction lo actualizas en el primer bucle, cuyo rango es:

Código C:
Ver original
  1. for(size_t i=0; i<m_vChoralList.size() - 1; ++i)

Es decir, si m_vChoralList tiene 10 elementos, i<size-1 = i<10-1 = i<9. En conclusión, este bucle irá de 0 a 8, insertando 9 elementos en el vector antes mencionado... como ves has perdido un elemento.

Y lo mismo te sucede en el segudo bucle principal.

Por otro lado, dado que el algoritmo que usas es el mismo, yo me plantearía moverlo a una función independiente para reutilizar código... suele ser una buena idea.

Un saludo

Etiquetas: c++
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 12:29.