Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Заполнение Vector (https://forum.antichat.xyz/showthread.php?t=176042)

Akum 04.02.2010 01:10

Заполнение Vector
 
Как правильно заполнить вектор символами из строки:
пишу так:
Код:

#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;
}
}

При выводе за место русских букв пишет знаками!
Как исправить ?
Спасибо за помощь!

Gar|k 04.02.2010 01:13

setlocale думаю тебе поможет

Akum 04.02.2010 02:23

Цитата:

Сообщение от Gar|k
setlocale думаю тебе поможет

И я думаю! :)
Но я уже все что можно в параметрах указывал :D а толку 0

Ra$cal 04.02.2010 04:31

Код:

strlen(st.c_str())
умиляют такие перлы. ну читани ты доки ( http://www.cplusplus.com/reference/ ), неужели не веришь что в классе строки есть метод получения длины оной?

Код:

#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: читай книжки. а то уход за пределы массива и кривые стрлены говорят о писании методом тыка.

Akum 04.02.2010 15:02

Цитата:

Сообщение от Ra$cal
Код:

strlen(st.c_str())
умиляют такие перлы. ну читани ты доки ( http://www.cplusplus.com/reference/ ), неужели не веришь что в классе строки есть метод получения длины оной?

Код:

#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: читай книжки. а то уход за пределы массива и кривые стрлены говорят о писании методом тыка.

Спасибо!
Но русские символы все равно не отображаються :mad:
И еще ни когда не видел операцию : string() = st[i] это приведение типа?(в первый раз такое вижу)
Ubuntu 9.10 х64 Code::Bloks

Ra$cal 04.02.2010 17:42

ну на счет русского хз. это под вендой такой способ работает.

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

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

Akum 04.02.2010 23:33

Цитата:

Сообщение от Ra$cal
ну на счет русского хз. это под вендой такой способ работает.

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

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

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


Время: 21:38