2012-10-10 14 views
5

tengo esta cadena:C++ subcadena devolver resultados erróneos

std::string date = "20121020"; 

que estoy haciendo:

std::cout << "** Date: " << date << "\n"; 
std::cout << "Year: " << date.substr(0,4) << "\n"; 
std::cout << "Month: " << date.substr(4,6) << "\n"; 
std::cout << "Day: " << date.substr(6,8) << "\n"; 

Pero im conseguir:

** Date: 20121020 
Year: 2012 
Month: 1020 
Day: 20 

en cuenta que el mes debe ser 10, no 1020. Las posiciones son correctas, lo intentaron todo, ¿está fallando?

+12

El segundo argumento es la longitud de la subcadena, no el índice final. –

+5

'std :: string date = 20121020' es sintácticamente incorrecto. ¿Querías decir 'std :: string date =" 20121020 "'? –

+2

@DanielFischer, podría ser una respuesta, porque ese es exactamente el problema. – Chad

Respuesta

14
std::cout << "Month: " << date.substr(4,6) << "\n"; 

El segundo argumento es incorrecto. Está especificando "Dame como subcadena de caracteres, comenzando en la posición 4".

es probable que desee:

std::cout << "Month: " << date.substr(4,2) << "\n"; 
+0

Gracias, eso funcionó, pensé que substr sería como Python, y tienes que pasar las posiciones :) Gracias de nuevo – jviotti

+1

@JuanCruzViotti: No hay nada como leer la documentación ... –

3

Prueba esto:

std::cout << "** Date: " << date << "\n"; 
std::cout << "Year: " << date.substr(0,4) << "\n"; 
std::cout << "Month: " << date.substr(4,2) << "\n"; 
std::cout << "Day: " << date.substr(6,2) << "\n"; 

Creo substr toma iniciar y longitud como argumentos.

+0

Ese fue el error, pensé que la sintaxis substr será como el corte de pitón, y los argumentos donde ambas posiciones de la cadena, Gracias. – jviotti

-1

http://www.cplusplus.com/reference/string/string/substr/

string substr (pos size_t = 0, size_t n = npos) const;

pos Posición de un carácter en el objeto de cadena actual que se utilizará como carácter inicial para la subcadena. Si la posición aprobada supera el final de la cadena, se produce una excepción out_of_range.

n Longitud de la subcadena. Si este valor haría que la subcadena se extendiera más allá del final del contenido de la cadena actual, solo se usarán esos caracteres hasta el final de la cadena. npos es un valor constante de miembro estático con el mayor valor posible para un elemento de tipo size_t, por lo tanto, cuando se utiliza este valor, todos los caracteres entre pos y el final de la cadena se utilizan como la subcadena de inicialización.

Así que su error en el código es que ha esperado que el segundo parámetro sea la posición del último carácter en lugar de la longitud de la subcadena.

+0

Si cita documentación, cite en.cppreference.com en lugar de cplusplus.com.este último ha conocido inconsistencias e información incorrecta –

+0

Gracias, es bueno saberlo. De todos modos, para esta situación, he comprobado la información y he encontrado que es correcta, desde mi punto de vista no es realmente relevante la descarga de información siempre que la información sea corect. En la parte superior de este en el sitio especificado por usted, la explicación es más corta, lo que no siempre es bueno cuando quiere explicar algo a otra persona. –

Cuestiones relacionadas