2010-01-29 17 views
8

Sto scrivendo un programma che richiede l'immissione di una stringa, quindi suddivisa in singole lettere. Essenzialmente, ho bisogno di aiuto per trovare un modo per trasformare "stringa" in ["s", "t", "r", "i", "n", "g"]. Le stringhe vengono anche memorizzate utilizzando il tipo di dati stringa anziché solo un array di caratteri predefinito. Mi piacerebbe mantenerlo in questo modo ed evitare char, ma lo userò se necessario.Dividi la stringa in una serie di caratteri in C++

Qualsiasi aiuto sarebbe bello, grazie in anticipo.

+0

Avete bisogno di fare qualcosa per le lettere dopo che è diviso? Cioè, è necessario inserire le lettere in una sorta di struttura dati diversa da 'stringa'? – Potatoswatter

+0

Questa è una domanda stupida, una stringa è una matrice di caratteri. – Ian

risposta

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

spero che lo spiega

+0

Non mi sento come se non fossi qui per dare tutorial, solo risposte. –

+1

Per la cronaca, puoi anche solo fare: cout << "ciao" [1]; – AshleysBrain

+2

@AshleysBrain: Or cout << 1 ["hello"]; – ybungalobill

1

Una stringa è solo una sequenza del carattere sottostante (cioè char per std :: string e wchar_t per std :: wstring).

A causa di ciò, si ottiene facilmente ogni lettera:

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

You're :: gonna :: scare :: him :: with :: all :: that :: stuff. imo usando 'int' o, ancora meglio,' size_t' funzionerà su ogni piattaforma esistente ed è molto più chiaro. –

14

Supponendo che hai già la stringa immessa:

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

Questo riempirà il vettore v con i caratteri da una stringa.

+0

La soluzione migliore che ho visto! Grazie mille. – Fomentia

1

Provare a utilizzare il metodo di 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

L'aggiunta di sizeof ('\ 0') alla lunghezza non è necessaria perché potrebbe essere maggiore di 1 e quindi l'array assegnato avrà una dimensione superiore a quella necessaria. Aggiungere 1 invece di sizeof ('\ 0') è migliore. – George

+1

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

+0

Non vero! sizeof (char) non è * sempre * 1. Ho lavorato con un chip DSP dove * tutto * era almeno a 32 bit, char, short, int-sizeof (char) == sizeof (short) == sizeof (int). Lo standard C dice solo che sizeof (char) <= sizeof (short) <= sizeof (int) ma non richiede sizeof (char) == 1. Uno degli effetti collaterali è stato il casting to char e BYTE per limitare i valori a 8 bit non ha avuto alcun effetto poiché il tipo di dati era nativamente a 32 bit. Certo, questa era un'architettura insolita, ma lo standard C sicuramente non dice sizeof (char) == 1. – Ryan