ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

04.02.2010, 01:10
|
|
Познающий
Регистрация: 05.01.2010
Сообщений: 32
Провел на форуме: 95565
Репутация:
5
|
|
Заполнение 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;
}
}
При выводе за место русских букв пишет знаками!
Как исправить ?
Спасибо за помощь!
|
|
|

04.02.2010, 01:13
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
setlocale думаю тебе поможет
|
|
|

04.02.2010, 02:23
|
|
Познающий
Регистрация: 05.01.2010
Сообщений: 32
Провел на форуме: 95565
Репутация:
5
|
|
Сообщение от Gar|k
setlocale думаю тебе поможет
И я думаю!
Но я уже все что можно в параметрах указывал  а толку 0
|
|
|

04.02.2010, 04:31
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
умиляют такие перлы. ну читани ты доки ( 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: читай книжки. а то уход за пределы массива и кривые стрлены говорят о писании методом тыка.
|
|
|

04.02.2010, 15:02
|
|
Познающий
Регистрация: 05.01.2010
Сообщений: 32
Провел на форуме: 95565
Репутация:
5
|
|
Сообщение от Ra$cal
умиляют такие перлы. ну читани ты доки ( 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: читай книжки. а то уход за пределы массива и кривые стрлены говорят о писании методом тыка.
Спасибо!
Но русские символы все равно не отображаються
И еще ни когда не видел операцию : string() = st[i] это приведение типа?(в первый раз такое вижу)
Ubuntu 9.10 х64 Code::Bloks
|
|
|

04.02.2010, 17:42
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
ну на счет русского хз. это под вендой такой способ работает.
про string() = st[i] - это из-за того что в компиле 2003 студии у конструктора string нет варианта, который берет один символ, зато есть операция присвоения от одного символа. по сути это создание локальной переменной без имени и присвоение ей значения а потом копирование этого значения в вектор.
иначе бы я сделал так letters.push_back( string(st[i]) );
|
|
|

04.02.2010, 23:33
|
|
Познающий
Регистрация: 05.01.2010
Сообщений: 32
Провел на форуме: 95565
Репутация:
5
|
|
Сообщение от Ra$cal
ну на счет русского хз. это под вендой такой способ работает.
про string() = st[i] - это из-за того что в компиле 2003 студии у конструктора string нет варианта, который берет один символ, зато есть операция присвоения от одного символа. по сути это создание локальной переменной без имени и присвоение ей значения а потом копирование этого значения в вектор.
иначе бы я сделал так letters.push_back( string(st[i]) );
спасибо что разъяснили.
А с русскими символами поступил просто в лоб))) по символу push_back() вставляю 66 вышло))).
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|