1 Востаннє редагувалося Johny_Hacker (10.11.2014 14:46:44)

Тема: Операції зі строками

Є вектор строк і після введення в нього слів, з першого слова перші три букви записуються в першу строку додаткового вектору і після цього усі наступні слова(точніше їхні перші 3 букви) порівнюються з трьома буквами з першої строки додаткового вектору.

#include <iostream.h>
#include <cstring>
#include <windows.h>
#include <vector.h>

using namespace std;

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    vector <string> words;
    vector <string> letters;
    string buff;
    cout<<"Введіть слова, для закінчення вводу натисніть два рази Enter"<<endl;
    do 
    {
      getline(cin, buff);
      if (buff.size() > 0)
         words.push_back(buff);
    } while (buff != "");
    
    words[0].copy(letters[0],0,3);
    for(int i=1;i<words.size();i++)
    {
        if(words[i].compare(letters[0],0,3))
            cout<<words[i]<<endl;
    }
    cin.ignore();
    cin.get();
    return 0;
}

В строці 23, де має бути копіювання вибиває таку помилку:
no matching function for call to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::copy(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, int)'

Аналогічно в строці, там де відбувається порівняння.

2

Re: Операції зі строками

Я не знайшов функції copy в cstring. А ви?

3

Re: Операції зі строками

http://www.cplusplus.com/reference/cstring/?kw=cstring
http://www.cplusplus.com/reference/cstring/strcpy/

4

Re: Операції зі строками

Якщо її там нема, то яким тоді чином скопіювати перші три символи одного рядка в інший?

5

Re: Операції зі строками

quez написав:

Я не знайшов функції copy в cstring. А ви?

Якщо її там нема, то яким тоді чином скопіювати перші три символи одного рядка в інший?

strcpy я намагався використати з самого початку, але з нею теж не працює. наскільки я зрозумів вона використовуєтсья для символьних масивів. а не для типу string.

6

Re: Операції зі строками

Знайти документацію по строках з <windows.h> і прочитати, тому що ваш string очевидно звідти.

7

Re: Операції зі строками

А використовувати string обов'язково?
Думаю простим символьним масивом буде набагато простіше.

8 Востаннє редагувалося Johny_Hacker (10.11.2014 19:55:50)

Re: Операції зі строками

quez написав:

Знайти документацію по строках з <windows.h> і прочитати, тому що ваш string очевидно звідти.

windows.h в мене лише для цих рядків

SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

А для чого тоді форум? Перед тим, як писати сюди я дивився документацію, і функція copy є у string.h

http://www.cplusplus.com/reference/string/string/copy/

Та й помилка, якщо функція невизначена має бути зовсім інша. Тут щось незрозуміле, тому я й прошу допомоги

Joker написав:

А використовувати string обов'язково?
Думаю простим символьним масивом буде набагато простіше.

Та навпаки, зі стрінгом має бути простіше ніби. Не думав, що зіткнусь з такою проблемою. Адже просто скопіювати чи порівняти два стрінги - запросто, а от певну кількість символів - отут проблема.

9

Re: Операції зі строками

Звичайний символьний масив буде простіше. І крім цього зможете перевірити кожен елемент окремо

Спробуйте, може це відео допоможе.

Подякували: Johny_Hacker1

10

Re: Операції зі строками

Joker написав:

Звичайний символьний масив буде простіше. І крім цього зможете перевірити кожен елемент окремо

Спробуйте, може це відео допоможе.

Добре, дякую

11

Re: Операції зі строками

Пане Johny_Hacker, ви читали довідку, перед тим, як задавати питання? std::string::copy копіює символи з рядка до масиву символів. А вам std::string::substr потрібен:

letters[0] = words[0].substr(0,3);
Подякували: Johny_Hacker1

12

Re: Операції зі строками

koala написав:

Пане Johny_Hacker, ви читали довідку, перед тим, як задавати питання? std::string::copy копіює символи з рядка до масиву символів. А вам std::string::substr потрібен:

letters[0] = words[0].substr(0,3);

Дякую! Я читав, але, як видно, читав неуважно. Буду старатись бути уважнішим