2010-01-29 13 views
8

Piszę program, który wymaga wprowadzenia łańcucha, a następnie podzielenia go na pojedyncze litery. Zasadniczo potrzebuję pomocy w znalezieniu sposobu na zamianę "ciągu znaków" na ["s", "t", "r", "i", "n", "g"]. Łańcuchy są również przechowywane przy użyciu typu danych łańcuchowych zamiast domyślnie tablicy znaków. Chciałbym zachować to w ten sposób i uniknąć zwęglenia, ale użyję go w razie potrzeby.Podziel ciąg znaków na tablicę znaków w C++

Każda pomoc byłaby miła, z góry dziękuję.

+0

Czy trzeba coś zrobić, aby litery po to podzielić? Oznacza to, że musisz umieścić litery w strukturze danych innej niż "string"? – Potatoswatter

+0

To jest głupie pytanie, ciąg jest tablicą znaków. – Ian

Odpowiedz

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

Mam nadzieję, że wyjaśnia to

+0

Nie czuję się tak, jak nie jestem tutaj, aby dać tutoriale, tylko odpowiedzi. –

+1

Dla rekordu, możesz także zrobić: cout << "hello" [1]; – AshleysBrain

+2

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

1

Łańcuch jest po prostu ciągiem charakteru bazowego (tj char do std :: string i wchar_t do std :: wstring).

Z tego powodu łatwo dostać każdą literę:

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 używa 'int' lub, jeszcze lepiej,' size_t' będzie działać na każdej istniejącej platformie i jest o wiele bardziej przejrzyste. –

14

Zakładając, że już ciąg wprowadzane:

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

ten wypełni wektor v z postaciami z ciągiem.

+0

Najlepsze rozwiązanie, jakie widziałem! Dziękuję Ci bardzo. – Fomentia

1

Spróbuj użyć metody c_str() z std::string:

#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

Dodanie sizeof ('\ 0') do długości nie jest potrzebne, ponieważ może być większe niż 1, a przydzielona tablica będzie miała większy rozmiar niż potrzeba. Dodanie 1 zamiast sizeof ("\ 0") jest lepsze. – George

+1

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

+0

Nieprawda! sizeof (char) nie jest * zawsze * 1. Pracowałem z układem DSP, gdzie * wszystko * było co najmniej 32-bitowe, char, short, int - sizeof (char) == sizeof (short) == sizeof (int). Standard C tylko mówi, że sizeof (char) <= sizeof (short) <= sizeof (int), ale nie wymaga sizeof (char) == 1. Jednym z efektów ubocznych było to, że casting to char i BYTE, aby ograniczyć wartości do 8-bitów nie miało żadnego efektu, ponieważ typ danych był natywnie 32-bitowy. To była niezwykła architektura, ale standard C zdecydowanie nie mówi sizeof (char) == 1. – Ryan

Powiązane problemy