Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > string


Автор: box 19.5.2010, 19:34
где скачать библиотеки ?
#include <vector>
#include <string>

Автор: GoldFinch 19.5.2010, 19:37
box, они должны поставляться с компилятором
если нет - гуглите STL
например STLPort

Автор: box 19.5.2010, 20:35
поставил STLport-5.2.1

все равно не находит библиотеки :

# gcc -o output mysql.c
mysql.c:1:18: error: vector: No such file or directory
mysql.c:2:18: error: string: No such file or directory

Автор: azesmcar 19.5.2010, 20:45
а откуда в C STL?

Автор: box 19.5.2010, 20:50
нашел string так :
#whereis string 
и прописал в инклюде полный путь .
а vector  не находит ни locate ни whereis .

Автор: azesmcar 19.5.2010, 20:52
Повторяю, в СИ STL-а не было, нет и не будет, хоть полный путь пропиши, хоть танец дождя исполняй.

Автор: box 19.5.2010, 20:59
объясните популярнее где взять и как собрать библиотеку ?

Автор: djamshud 19.5.2010, 21:01
Ставьте g++, gcc-c++ или что-то еще в этом духе - в разных дистрибутивах по-разному называется.

Автор: azesmcar 19.5.2010, 21:02
Цитата(box @  19.5.2010,  20:59 Найти цитируемый пост)
объясните популярнее где взять и как собрать библиотеку ? 

какую библиотеку? разницу между языком программирования C и языком программирования C++ знаешь? о чем вообще речь?

Цитата(djamshud @  19.5.2010,  21:01 Найти цитируемый пост)
Ставьте g++, gcc-c++ или что-то еще в этом духе - в разных дистрибутивах по-разному называется. 

да он стоит там наверняка, просто мне непонятно, компилируется C код (вроде), зачем там нужен vector и string?

Автор: djamshud 19.5.2010, 21:03
Асло можно скачать сорцы гцц и сконфигурировать, как душе угодно.

Автор: box 19.5.2010, 21:04
а у меня что по вашему стоит ?

# gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)

Автор: azesmcar 19.5.2010, 21:04
сделаю телепатическое предположение

box

Цитата

mv mysql.c mysql.cpp
gcc -lstdc++ -o output mysql.cpp

Автор: box 19.5.2010, 21:06
мне нужно откомпилировать это :
http://forum.vingrad.ru/sources/topic-161759.html

Автор: azesmcar 19.5.2010, 21:08
Цитата(box @  19.5.2010,  21:06 Найти цитируемый пост)
мне нужно откомпилировать это :
http://forum.vingrad.ru/sources/topic-161759.html 

так это вообще C++ Builder, там еще и VCL используется...ставь C++ Builder.

Автор: box 19.5.2010, 21:16
ясно , подскажите где взять исходники функции аналога пхпешной explode()?
без заморочек с билдером или где взять билдер под линукс centos 

Автор: djamshud 19.5.2010, 21:17
azesmcar, да, я проглядел.

box, нагугли другой разбиватель строки. На винградовском же форуме было, причем буквально вчера.

Автор: azesmcar 19.5.2010, 21:19
Цитата(djamshud @  19.5.2010,  21:17 Найти цитируемый пост)
box, нагугли другой разбиватель строки. На винградовском же форуме было, причем буквально вчера. 

 smile 
вот первое что выдал гугл.
http://stackoverflow.com/questions/236129/c-how-to-split-a-string
решений море..и сдался тебе этот VCL.

Автор: box 19.5.2010, 22:29
как загнать вывод в массив ?
Код


    const vector<string> words = split(buffer, "|");
    copy(words.begin(), words.end(), ostream_iterator<string>(cout, "\n"));


Автор: azesmcar 19.5.2010, 23:56
Цитата(box @  19.5.2010,  22:29 Найти цитируемый пост)
как загнать вывод в массив ?

т.е. как? он уже изначально в массиве.

Автор: box 20.5.2010, 00:21
а как вывести допустим 5-й эллемент из массива ?
Код


 std::string substring( s.substr(prev_pos, pos-prev_pos) ); // Last word
    std::cout << substring ;



и как  пробежаться по массиву циклом?

Автор: djamshud 20.5.2010, 00:25
Код

const vector<string> words = split(buffer, "|");
count<<words[4];

Автор: box 20.5.2010, 01:20
подскажите как на данном примере вывести  только первый эллемент из разбитой строки 
Код


    std::string s(buffer);

    std::string::size_type prev_pos = 0, pos = 0;
    while( (pos = s.find('|', pos)) != std::string::npos )
    {
        std::string substring( s.substr(prev_pos, pos-prev_pos) );

        std::cout << substring << '\n';

        prev_pos = ++pos;
    }

std::string substring( s.substr(prev_pos, pos-prev_pos) ); // Last word
std::cout << substring ;


Автор: azesmcar 20.5.2010, 08:53
не пойму я чего тебе надо, скажи конкретно, а то каждый раз по вопросу и в конце выясняется что тебе вообще что-то другое нужно.

Автор: box 20.5.2010, 14:58
я проверил тот код и оказалось что он криво разбивает на подстроки , меня интересует как загнать в трех мерный массив и вывести каждый первый элемент массива , на примере пхп массива :
$arr[0]=('host'=>'some host','ip'=>'some ip','string'=>'some string');
.........................
так вот нужно выводить только элемент host из всего массива .
на пхп или перле это все делается в пару строк а в си я новичек .
Код

    std::string s(buffer);
    std::string::size_type prev_pos = 0, pos = 0;
    while( (pos = s.find('|', pos)) != std::string::npos )
    {
        std::string substring( s.substr(prev_pos, pos-prev_pos) );
        std::cout << substring << '\n';
        prev_pos = ++pos;
    }
std::string substring( s.substr(prev_pos, pos-prev_pos) ); // Last word
std::cout << substring ;

вот этот код отлчно радбивает строку , но не представляю как загнать вывод в трехмерный массив и потом как вывести только указанные элементы ?

Автор: azesmcar 20.5.2010, 15:35
Цитата(box @  20.5.2010,  14:58 Найти цитируемый пост)
вот этот код отлчно радбивает строку , но не представляю как загнать вывод в трехмерный массив и потом как вывести только указанные элементы ? 

Сложно понять что конкретно нужно, но предположительно тебе нужен std::map (ассоциативный массив).

Автор: box 20.5.2010, 22:31
крутая вещь этот map но не понятно как вставить в массив ? я пробую так , но вылазит ошибка :
Код


    std::map<int, char> fib;
............................................
    while ((read_bytes = read (fd, buffer, BUFFER_SIZE)) > 0)
    {
        buffer[read_bytes] = 0;


    std::string s(buffer);

    std::string::size_type prev_pos = 0, pos = 0;
    while( (pos = s.find('|', pos)) != std::string::npos )
    {
        std::string substring( s.substr(prev_pos, pos-prev_pos) );

     std::cout <<fib.insert() <<substring <<std::endl;

        prev_pos = ++pos;
    }
}
...........

Автор: azesmcar 21.5.2010, 13:37
Цитата(box @  20.5.2010,  22:31 Найти цитируемый пост)
крутая вещь этот map но не понятно как вставить в массив ? я пробую так , но вылазит ошибка :

Читай доки по map
http://www.cplusplus.com/reference/stl/map/insert/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)