Loading...
pesosz avatar pesosz 4 Точки

Templates C++ Code Organisation: Task 4. Split and Join

Здравейте, опитвам се да реша задачата, но зациклих на 1 от стъпките...

    std::vector<int> numbers = split<int>(line, separator);

Ето този ред от кода ми изисква функция split, с до колкото разбирам входни параметри: istream и char(separator)... Аз се опитвам да направя клас split, който да създаде обект от себе си, когато това се извика, с цел след това, когато трябва да коригираме vector-а с дадения ни joinStr и от код: 1,2,3,4,5,6  да се получи например 1->2->3->4->5->6  , да имам достъп до private полето на split, за да знам какъв е бил използвания separator там и директно да го заместя със joinStr който се подава в програмата... Но по начина по който е написано std::vector<int> numbers = split<int>(line, separator); това равенство извиква конструктора на класа split, а с конструктора не мога да return-a стойност към вектора.. Ако някой има решение много бих се радвал да го сподели!

Тагове:
0
C++ Advanced 25/02/2019 21:11:20
pesosz avatar pesosz 4 Точки

След като реших да сменя класовете с функции, реших че за да мога да разбера, кога има разделител, между отделните input-и, трябва да сменя всеки 1 separator с някой точно определен, например "|" и така после според моята логика ще е по лесно, когато трябва да го сменим с join string-a, но за сега ми излиза error: no match for 'operator==' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::basic_string<char> > >::value_type {aka std::__cxx11::basic_string<char>}' and 'char')|

 

ето и кода, който съм написал до тук, ако може някой да ми каже как да я продължа ще съм много благодарен:

Split.h:

#ifndef SPLIT_H
#include <vector>
#include <string>
#include <sstream>

template <class T> std::vector<T> split(std::string str, char & ch) {

    std::vector<T> tempVec;
    for(int i = 0; i < str.size(); ++i)
    {
        if (str[i] == ch)
        {
            str[i] = '|';
        }
        tempVec[i] = str[i];
    }
    return tempVec;
}


#define SPLIT_H
#endif // SPLIT_H
 

 

Join.h:
 

#ifndef JOIN_H
#include <iostream>
#include <string>
#include <vector>
using namespace std;

template <class T>
string join(std::vector<T> & vec, std::string & joiner) {

   char currentChar;
   std::string tempStr;
   std::string tempvecStr;

   for (int i = 0; i < vec.size(); ++i)
   {
       if (vec[i] == '|')
       {
           tempStr = tempStr + joiner;
       }
       if(vec[i] != '|')
       {
           tempvecStr = vec[i];
           tempStr += tempvecStr;
       }
   }

   return tempStr;
}

#define JOIN_H
#endif // JOIN_H
 

0
kolioi avatar kolioi 641 Точки

Парсването в split() го направи със std::getline() и един цикъл.

0
pesosz avatar pesosz 4 Точки

Оправих я, благодаря!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.