PDA

Просмотр полной версии : Заполнение Vector


Akum
04.02.2010, 01:10
Как правильно заполнить вектор символами из строки:
пишу так:

#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
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
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
ну на счет русского хз. это под вендой такой способ работает.

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

иначе бы я сделал так letters.push_back( string(st[i]) );
спасибо что разъяснили.
А с русскими символами поступил просто в лоб))) по символу push_back() вставляю 66 вышло))).