Заполнение Vector

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Akum, 4 Feb 2010.

  1. Akum

    Akum New Member

    Joined:
    5 Jan 2010
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Как правильно заполнить вектор символами из строки:
    пишу так:
    Code:
    #include <iostream>
    #include <string.h>
    #include <vector>
    #include <stdio.h>
    using namespace std;
    
    
    int main(){
    
    vector<string> letters;
     string st ="!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^abcdefghijklmnopqrstuvwxyz{|}~абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
      string st_d[300];
    
     for (unsigned int i = 0;i<=strlen(st.c_str());i++){
      st_d[i]=st[i];
    
    for (unsigned int i =0;i<=strlen(st.c_str());i++){
    letters.push_back(st_d[i]);
    cout<<st_d[i]<<endl;
    }
    }
    При выводе за место русских букв пишет знаками!
    Как исправить ?
    Спасибо за помощь!
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    setlocale думаю тебе поможет
     
    _________________________
  3. Akum

    Akum New Member

    Joined:
    5 Jan 2010
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    И я думаю! :)
    Но я уже все что можно в параметрах указывал :D а толку 0
     
  4. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Code:
    strlen(st.c_str())
    умиляют такие перлы. ну читани ты доки ( http://www.cplusplus.com/reference/ ), неужели не веришь что в классе строки есть метод получения длины оной?

    Code:
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    
    int main(){
    	system("mode con cp select=1251");
    	vector<string> letters;
    	string st ="!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^abcdefghijklmnopqrstuvwxyz{|}~абвгдеёжзийклмнопрс  туфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    	
    	for (unsigned int i = 0;i<st.length();i++){
    		letters.push_back( string() = st[i] );
    		cout << letters[i].c_str() << endl;
    	}
    	system("pause");
    }
    но вообще system юзать не айс. локали работают через раз с бубном в vs2003

    ps: читай книжки. а то уход за пределы массива и кривые стрлены говорят о писании методом тыка.
     
  5. Akum

    Akum New Member

    Joined:
    5 Jan 2010
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Спасибо!
    Но русские символы все равно не отображаються :mad:
    И еще ни когда не видел операцию : string() = st это приведение типа?(в первый раз такое вижу)
    Ubuntu 9.10 х64 Code::Bloks
     
  6. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    ну на счет русского хз. это под вендой такой способ работает.

    про string() = st - это из-за того что в компиле 2003 студии у конструктора string нет варианта, который берет один символ, зато есть операция присвоения от одного символа. по сути это создание локальной переменной без имени и присвоение ей значения а потом копирование этого значения в вектор.

    иначе бы я сделал так letters.push_back( string(st) );
     
  7. Akum

    Akum New Member

    Joined:
    5 Jan 2010
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0

    спасибо что разъяснили.
    А с русскими символами поступил просто в лоб))) по символу push_back() вставляю 66 вышло))).