[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Как-то так
    Code:
    #include <iostream.h> 
    #include <vector>
    using namespace std;
    
    typedef struct{
    	int x,y;
    }twoint;
    typedef vector<twoint> myvec;
    myvec myvector;
    
    void add_values(int x, int y)
    {
    	twoint temp;
    	temp.x = x;
    	temp.y = y;
    	myvector.push_back(temp);
    }
    twoint find_by_x(int x)
    {
    	myvec::iterator i;
    	for(i = myvector.begin(); i!=myvector.end(); ++i)
    	{
    		if(i->x == x) return *i;
    	}
    }
    twoint find_by_y(int y)
    {
    	myvec::iterator i;
    	for(i = myvector.begin(); i!=myvector.end(); ++i)
    	{
    		if(i->y == y) return *i;
    	}
    }
    twoint find_by_indx(int index)
    {
    	return myvector[index];
    }
    
    void set_to_indx(int index, twoint newvalue)
    {
    	myvector[index] = newvalue;
    }
    int main()
    {
    	int x,y;	
    	cout<<"Vvedite paru x,y: \n";cin>>x>>y;
    	add_values(x,y);
    }
     
  2. Pack4

    Pack4 New Member

    Joined:
    28 Jun 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0

    т.е тут вместо pair<int,int> просто везде twoint?
     
  3. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    т.е. тут пример работы с вектором и итератором.
    pair<int,int> и структура twoint аналогичны.
     
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    PHP:
    #include <iostream>
    #include <iterator>
    #include <vector>
    #include <utility>

    void main()
    {
        
    std::vector<std::pair<int,int>> vec;

        
    vec.push_back(std::make_pair(12)); //добавление в вектор элементов
        
    vec.push_back(std::make_pair(18));
        
    vec.push_back(std::make_pair(26));
        
    vec.push_back(std::make_pair(23));

        
    //поиск элемента по первому значению
        
    for(std::vector<std::pair<int,int>>::const_iterator i vec.cbegin(); != vec.cend(); i++)
        {
            if((*
    i).first == 2)
                
    std::cout << "found pair: " << (*i).first << ", " << (*i).second << std::endl;
        }

        
    vec.erase(vec.cbegin()); //удалили первый элемент

        
    std::cout << "First pair: " << (*vec.cbegin()).first << ", " << (*vec.cbegin()).second << std::endl;
    }
     
  5. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Code:
    #include <vcl.h>
    #pragma hdrstop
    #include <iostream.h>
    #include <tchar.h>
    // ---------------------------------------------------------------------------
    
    #pragma argsused
    
    int _tmain(int argc, _TCHAR* argv[]) {
    	std::cout << "Учимся программировать на языке С++!";
    	return 0;
    }
    Тип проекта Console Application. Чтобы выводились русские буквы нужно подключать локаль(setlocale).
     
  6. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    парсер ищет int main(), а ты ему void main(void) тем более конструкция main(void), если не изменяет память, не выйдет в C++(только в С). Следовательно компилятор не знал куда вставить функции(они служебные) InitVCL и ExitVCL и тупо их выкинул, а линкер их ищет и не может найти.

    Короче, там когда создаёшь консольный проект, студия спрашивает тип(там стоит С++) и что использовать9сними галочки Use VCL, Multithreaded).
    дальше замени код который сгенерируется, на
    PHP:
    #pragma hdrstop
    #include <iostream.h>
    #include <windows.h>


    void main() {
        
    cout << "Олололо!" << endl;
        
    system("pause");
        
    ExitProcess(0);
    }
     
    #5886 bad_boy, 1 Dec 2010
    Last edited: 1 Dec 2010
    1 person likes this.
  7. Pack4

    Pack4 New Member

    Joined:
    28 Jun 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    А индексы автоматически каждой паре присваиваются или нет? Чтобы несколько пар вводить, нужно массив данных определить для них?
     
  8. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Какие индексы? Порядковый номер?! Да.

    v.push_back(что-то);
    v.push_back(ещё что-то);

    v[0] - что-то
    v[1] - ещё что-то

    Возьми почитай книгу Скотт Мейерс - Эффективное использование STL. Оно того стоит.
     
  9. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    вот такой код уродец делает это одной строкой )
    если хочеш кому то отомстить напиши ему так )))
    Code:
    char b[]="hello my dear friend Max, How are you?";
    char f[128], *p, *q;
    *f = '\0', p=strstr(b, "Max"), 
    strncat(f, p , p && (q=strstr(p, ",")) ? q - p  < sizeof(f) ? q - p : 0 : 0);
    
    rudi
    GRRL Power
    вообще да поржал с вами ))))))))
     
    #5889 greki_hoy, 2 Dec 2010
    Last edited: 2 Dec 2010
  10. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Существует какая ни будь библиотека для C++ чтоб обменивать информацию по сокету было примерно так же легко как это делается в php?
     
  11. zeppe1in

    zeppe1in Elder - Старейшина

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    curl :)
    http://curl.haxx.se/libcurl/c/example.html
     
  12. SanichBfmv

    SanichBfmv New Member

    Joined:
    9 Sep 2010
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Сразу два вопроса во первых где в этом коде ошибка, просто делал и ошибка была забил, сейчас решил к ней вернутся ..

    Code:
    #include <iostream> 
    using namespace std;
    int Area (int length, int width);
    int main()
    {
    	int lengthOfYard;
    	int widthOfYard;
    	int areaOfYard;
    
    	cout << "\ nHow wide is your yard? ";
    	cin >> widthOfYard;
    	cout << "\ nHow long is your yard? ";
    	cin >> lengthOfYard;
    
    	areaOfYard= Area(lengthOfYard, widthOfYard);
    
    	cout << "\nYour yard is ";
    	cout << areaOfYard;
    	cout << " square feet\n\n";
    	return 0;
    }
    int Area (yardLength; yardWidth)
    { 
    	return yardLength*yardWidth;
    }
    А во вторых ест вот такой код авторитизации это с++ или с# если C# не могли бы вы его переписать на с++.. За ранее благодарен. Данный код мне нужен на будущее..
    Code:
    public static int TryLogin(string login, string password, string server)
            {
                login = login.ToLower();
    
                TcpClient client = new TcpClient(server, 29000);
                Socket socket = client.Client;
    
                byte[] serverData = new byte[1024];
                socket.Receive(serverData);
                if (serverData[0] != 0x1)
                    return -1;
    
                byte[] ServerKey = serverData.Skip(3).Take(16).ToArray();
                byte[] bytesLogin = Encoding.ASCII.GetBytes(login);
                byte[] bytesPassword = Encoding.ASCII.GetBytes(password);
    
                MD5 H1 = MD5.Create();
                byte[] LoginPlusPass = bytesLogin.Concat(bytesPassword).ToArray();
                byte[] LoginPlusPassMD5 = H1.ComputeHash(LoginPlusPass);
    
                HMACMD5 H2 = new HMACMD5(LoginPlusPassMD5);
                byte[] PassHash = H2.ComputeHash(ServerKey);
    
                byte loginLength = (byte)login.Length;
                List<byte> PacketC03 = new List<byte>();
                PacketC03.AddRange(new byte[] { 0x03, (byte)(loginLength + 18), loginLength });
                PacketC03.AddRange(bytesLogin);
                PacketC03.Add(0x10);
                PacketC03.AddRange(PassHash);
                socket.Send(PacketC03.ToArray());
    
                serverData = new byte[1024];
                socket.Receive(serverData);
                socket.Disconnect(false);
    
                if (serverData[0] == 0x5)
                    return -1;
                else if (serverData[0] == 0x2)
                    return 1;
                else
                    return 0;
            }
     
  13. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    Code:
    int Area (yardLength; yardWidth)
    
    это чеза вротебический синтаксиси ?)
    ты наверно все таки это имел в виду ?
    Code:
    int Area (const int yardLength, const int yardWidth)
    
     
  14. SanichBfmv

    SanichBfmv New Member

    Joined:
    9 Sep 2010
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Так написано в книги Либерти.
     
  15. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    Вопрос по C++Builder 6: Нужно ввести размерность матрицы. Делаю два Edit и кнопку. Матрицу объявляю в классе формы как глобальную переменную int **m .Но потом в методе кнопки пытаюсь создать динамический двумерный массив:
    Code:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
             x=StrToInt(Edit1->Text);
             y=StrToInt(Edit2->Text);
             int i;
             **m=new int *[x];
             for(i=0;i<x;i++)
                  m[i]=new int [y];
    ...
    }
    но оно ругается на строку **m=new int *[x]; - Cannot convert 'int * *' to 'int'
    Я то понимаю что правильно нужно int **m=new int *[x]; но это уже переопределение переменной и соответственно в **m в классе будет пустота.
    В общем как мне разрулить эту схемку?
     
  16. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    записью **m равносильна m[0][0], ты получаешь объект на который указывает m. Для того чтобы присвоить значение указателю не нужно писать ** :)
    Code:
    m=new int *[x];
    ты говоришь m что бы он хранил указатель на массив указателей.
     
  17. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    186
    Reputations:
    5
    Вопрос.
    Использую builder 6
    имею ListView
    как изменить цвет отдельных строк, тех что caption

    я хочу вывести список данных в ListView
    и там в зависимости от некого значения хочу менять цвет шрифта
     
    #5897 rudi, 4 Dec 2010
    Last edited: 4 Dec 2010
  18. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    Нужно считать матрицу с тхт файла на C++ Builder 6 .Вот придумал такой код:
    Code:
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
            OpenDialog1->Filter = "Text files (*.txt)|*.TXT";
            if(OpenDialog1->Execute())
            {
                    AnsiString name=OpenDialog1->Files->CommaText;
                    TFileStream  *tfile=new TFileStream(name,fmOpenRead);
                    tfile->Seek(0,0);
                    char *buf;
                    int x=tfile->Size;
                    buf=new char [x];
                    tfile->Read(buf,x);
                    //StringGrid2->Visible=true;
                    m2=new int [x];
                    char *probel;
                    char *enter;
                    int i=0;
                    enter=strtok(buf,"\r\n");
                    while(enter !=NULL)
                    {
                            probel=strtok(enter," ");
                            if(enter!="\r\n")
                            while(probel !=NULL)
                            {
                                    if(probel!=" ")
                                    {
                                            m2[i]=StrToInt(probel);
                                            i++;
                                    }
                            probel=strtok(NULL," ");
                            }
                    enter=strtok(NULL,"\r\n");
                    }
            }
    }
    
    Но записывает только первую строку. Делал отладку то после строки enter=strtok(buf,"\r\n") buf как бы перезаписуется и там уже не весь файл а только первая строка.
     
  19. NAEMN1K

    NAEMN1K New Member

    Joined:
    11 Sep 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Подскажите, как можно перебрать по очереди элементы строки, состоящей, к примеру, из цифр?
     
  20. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Слишком неконкретное условие.
    Вот конкретно для цифр:
    PHP:
    #include <string>
    #include <iostream>
    #include <iterator>
    #include <vector>
    #include <stdlib.h>

    std::vector<unsigned intsplit_numbers(const std::stringstr, const std::stringdelim)
    {
        
    std::vector<unsigned intret;

        
    std::string::size_type pos 0;

        while((
    pos str.find(delimpos)) != std::string::npos)
        {
            
    pos += delim.length();
            
    ret.push_back(std::atoi(str.c_str() + pos));
        }

        return 
    ret;
    }


    void main()
    {
        
    std::string numbers "0 1 2 5 10 100500";
        
    std::vector<unsigned intres split_numbers(numbers" ");
        for(
    std::vector<unsigned int>::const_iterator i res.cbegin(); != res.cend(); i++)
            
    std::cout << *<< std::endl;
    }
     
Thread Status:
Not open for further replies.