2010-01-29 34 views
8

Estoy escribiendo un programa que requiere una cadena para ser copiada, luego dividida en letras individuales. Esencialmente, necesito ayuda para encontrar una manera de convertir "cadena" en ["s", "t", "r", "i", "n", "g"]. Las cadenas también se almacenan usando el tipo de datos de cadena en lugar de solo una matriz de caracteres predeterminada. Me gustaría mantenerlo así y evitar char, pero lo usaré si es necesario.Separar cadena en una matriz de caracteres en C++

Cualquier ayuda sería agradable, gracias de antemano.

+0

¿Es necesario hacer algo para las letras después de que se divide? Es decir, ¿necesita poner las letras en algún tipo de estructura de datos que no sea 'cadena '? – Potatoswatter

+0

Esta es una pregunta tonta, una cadena es una matriz de caracteres. – Ian

Respuesta

12
string a = "hello"; 
cout << a[1]; 

espero que lo explica

+0

no tengo ganas, ya que no estoy aquí para dar tutoriales, solo respuestas. –

+1

Para el registro, también puede hacer: cout << "hello" [1]; – AshleysBrain

+2

@AshleysBrain: O cout << 1 ["hola"]; – ybungalobill

1

Una cadena es una secuencia del carácter subyacente (es decir, carbón para std :: string y wchar_t para std :: wstring).

Debido a eso, se obtiene fácilmente cada letra:

for (std::string::size_type l = 0; l < str.length(); ++l) 
{ 
    std::string::value_type c = str[l]; 
} 
+4

Estás :: gonna :: scare :: him :: with :: all :: that :: stuff. imo usando 'int' o, mejor aún,' size_t' funcionará en todas las plataformas existentes y es mucho más claro. –

14

Suponiendo que ya haya introducido la cadena:

string s("string"); 
vector<char> v(s.begin(), s.end()); 

Esto llenará el vector v con los caracteres de una cadena.

+0

¡La mejor solución que he visto! Muchas gracias. – Fomentia

1

Trate de usar el método de std::stringc_str():

#include <string> 
using namespace std; 

int main(void) 
{ 
    string text = "hello"; 
    size_t length = text.length() + sizeof('\0'); 
    char * letters = new char[length]; 
    strcpy(letters, length.c_str()); 
    for (unsigned int i = 0; i < length; ++i) 
    { 
     cout << '[' << i << "] == '" << letters[i] << "'\n"; 
    } 
    return EXIT_SUCCESS; 
} 
+0

No es necesario agregar sizeof ('\ 0') a la longitud porque puede ser más de 1 y, a continuación, la matriz asignada tendrá un tamaño superior al necesario. Agregar 1 en lugar de sizeof ('\ 0') es mejor. – George

+1

George, sizeof (char) is _always_ 1. – paxdiablo

+0

¡No es cierto! sizeof (char) no es * siempre * 1. Trabajé con un chip DSP donde * todo * tenía al menos 32 bits, char, short, int - sizeof (char) == sizeof (short) == sizeof (int) El estándar C simplemente dice que sizeof (char) <= sizeof (short) <= sizeof (int) pero no requiere sizeof (char) == 1. Uno de los efectos secundarios fue ese casting en char y BYTE para limitar los valores a 8 bits no tuvo ningún efecto ya que el tipo de datos era nativamente de 32 bits. De acuerdo, esta era una arquitectura inusual, pero el estándar C definitivamente no dice sizeof (char) == 1. – Ryan

Cuestiones relacionadas