C++

2010-01-29 3 views
8

'daki karakter dizisine bölünmüş dizeyi giriyorum Girilecek bir dizeyi gerektiren ve daha sonra tek tek harflere ayrılmış bir program yazıyorum. Esasen, "string" i ["s", "t", "r", "i", "n", "g"] şeklinde çevirmenin bir yolunu bulmak için yardıma ihtiyacım var. Dizeler, yalnızca bir dizi karakter dizisi yerine dize veri türü kullanılarak depolanır. Bu şekilde tutmak ve char'dan kaçınmak istiyorum, ancak gerekirse bunu kullanacağım.C++

Her türlü yardım güzel olurdu, şimdiden teşekkürler.

+0

bunu bölmek oluyor sonra harfler için bir şeyler yapmak gerekiyor mu? Yani, harfleri "string" dışında bir tür veri yapısına koymanız gerekiyor mu? – Potatoswatter

+0

Bu aptalca bir soru, bir dizi karakter dizisidir. – Ian

cevap

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

Size öyle

+0

Ben öğretici, sadece cevaplar vermek için burada değilim gibi hissetmiyorum. –

+1

Kayıt için, sadece yapabilirsiniz: cout << "merhaba" [1]; – AshleysBrain

+2

@AshleysBrain: Veya cout << 1 ["merhaba"]; – ybungalobill

1

bir dize yatan karakteri (std :: wstring için std :: string ve wchar_t için yani char) sadece bir dizisidir açıklıyor umuyoruz.

Bunun, kolayca her mektup almak Çünkü:

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

Sizlersiniz :: will :: scare :: him :: with :: all :: that :: stuff. 'int' veya daha da iyisi kullanarak, 'size_t' mevcut her platformda çalışacak ve daha net olacak. –

14

zaten dize Girilen varsayarsak: Bu bir dizeden karakterleri ile vektör v dolduracaktır

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

.

+0

En iyi çözüm gördüm! Çok teşekkür ederim. – Fomentia

1

std::string ait c_str() yöntemini kullanmayı deneyin:

#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

Boydan büyüklüğüne ('\ 0') eklenmesi gerekli değildir, çünkü 1'den fazla olabilir ve daha sonra ayrılan dizinin gerekenden daha yüksek bir boyutu olacaktır. Sizeof ('\ 0') yerine 1 eklemek daha iyidir. – George

+1

George, sizeof (char) _always_ 1. – paxdiablo

+0

Doğru değil! sizeof (char) * her zaman * 1. DSP yongası ile çalıştım. * her şey * en az 32 bit, char, kısa, int - sizeeof (char) == sizeof (kısa) == sizeof (int). C standardı, sadece (char) <= sizeof (kısa) <= sizeof (int) 'nin değil, fakat sizeof (char) == 1 gerektirmediğini söyler. Yan etkilerden biri, char ve BYTE'ye değerlerini sınırlamaktır. Veri türü doğal olarak 32-bit olduğu için 8-bit'in etkisi yoktu. Bu alışılmadık bir mimarlık verildi, ancak C standardı kesinlikle diyoruz (char) == 1. – Ryan