Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2015, 22:50   #1
Анастасия-18
 
Регистрация: 19.02.2015
Сообщений: 4
По умолчанию Разбиение строки

Здравствуйте! Пожалуйста, помогите найти ошибку в коде. Мне надо написать функцию, которая разбивает строку на слова(разделители:" ,.?:!")
Реализовывать с помощью векторов.
У меня выводится всегда всё кроме последнего слова, не могу найти ошибку
Код:
#include<iostream>
#include<vector>
#include<iterator>
#include<string>
using namespace std;
void Separating(const string& str, vector<string>&v1, const string& delimeters = " ")
{

    int LenStr = str.length();
    int DelLen = delimeters.length();
    int counter = 0;//счётчик разделителей
    for (int i = 0; i < LenStr; ++i)
        {
            for (int j = 0; j < DelLen; ++j)
                {
                        if (str[i] == delimeters[j])
                        counter++;
                }
        }
        counter++;
        v1.reserve(counter);//выделение памяти для массива строк
        string world;
        int i = 0;

        for (i = 0; i < LenStr; ++i)
        {
                for (int j = 0; j < DelLen; ++j)
                {

                        if ((str[i] != delimeters[j]) && (j == DelLen - 1))//если элемент строки не равен ни одному из разделителей, записываем его в world
                                world.push_back(str[i]);



                        else
                                if (str[i] == delimeters[j])
                                {

                                v1.push_back(world);
                                world.clear();
                                i++;
				
                                }
                        }
        }

}


int main()
{
        string A = "Test,String Words";
        vector<string>v1;
        string Del = " ,.?!";

        Separating(A, v1, Del);
        copy(v1.begin(), v1.end(), ostream_iterator<string>(cout, "\n"));

        return 0;
}
Анастасия-18 вне форума Ответить с цитированием
Старый 19.03.2015, 00:26   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

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

Код:
// regex_token_iterator_field_splitting.cpp
#include <iostream>
#include <string>
#include <regex>

using namespace std;

int main()
{
    regex reg("\\s*[,;]+\\s*");
    while (true) {
        cout << "Enter a string to split on ',' and ';' (q=quit): ";
        string str;
        if (!getline(cin, str) || str == "q")
            break;
        
        const sregex_token_iterator end;
        for (sregex_token_iterator iter(str.begin(), str.end(), reg, -1);
             iter != end; ++iter) {
            cout << "\"" << *iter << "\"" << endl;
        }
    }
    
    return 0;
}
Если что, пример находится в параграфе: "Part 2. C++ Coding the Professional Way" -> "Chapter 14: Using Strings and Regular Expressions" -> "Regular Expressions" -> "regex_token_iterator"
8Observer8 вне форума Ответить с цитированием
Старый 19.03.2015, 17:46   #3
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
class str_tokenizer
{
    typedef std::list<std::string> strlist;
public:
    str_tokenizer(char* str, const char* fmt)
    {
        for(char* p = strtok(str, fmt); p && p[0]; p = strtok(NULL, fmt))
           m_strl.push_back(std::string(p));
    }
    ~str_tokenizer()
    {}

    void print()
    {
        for(strlist::const_iterator it = m_strl.begin(); it != m_strl.end(); ++it)
            printf("%s\n", it->c_str());
    }    
private:
    strlist m_strl;
};

int main(void)
{
    char str[1024] = "Test,String Words";

    str_tokenizer st((char*)str, " ,:.!");
    st.print();
    return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбиение строки на массив подстрок PastoriXx Общие вопросы по Java, Java SE, Kotlin 1 11.12.2013 16:13
Разбиение строки на строки(Pascal). Lappi Помощь студентам 0 09.12.2012 18:52
Разбиение строки kent4 Microsoft Office Excel 6 23.12.2010 15:18
Разбиение строки по маске Jetro Помощь студентам 1 19.11.2010 16:54
Разбиение строки по значениям artemavd Общие вопросы Delphi 7 11.11.2010 09:51