一个初学者字符串,构造函数

时间:2015-05-28 05:58:07

标签: c++ string constructor

我正在为我的课程编写代码,而且我遇到了问题。我以前从未使用过C ++中的字符串,而且我也不知道如何将一个字符串分成另外两个字符串。该程序也编译,但输出错误,我怀疑构造函数。有人可以看看,并给我一个anaswer,我应该改变什么代码才能正常工作?我非常感激:)

这里是代码: main(由老师给出)

   int main()
{
    oop::Data a;
    oop::Data b;

  {
        MACRO1;//co tu ma się dziać?
    Data b;     
  }

    const oop::Data Data_element = "Test-first"; // tworzony jest obiekt const o nazwie Data_element klasy Data, do którego wpisywany jest teks

    const oop::Data c(Data_element, "Test-second"); // wywołanie konstruktora

    a.full_data("Pierwszy Drugi");
    b.first() = b.second("Tekst testowy"); //co tu ma się dziać?

    std::cout
        << "a = " << a << std::endl;
    std::cout           
        << "b = " << b.full_data() << std::endl;
    std::cout
        << "c = " << c.first() << ", " << c.second() << std::endl;


    const oop::Data d = a.to_upper(); //zamienia na WIELKIE litery
    oop::Data e = d.to_lower(); //zamienia na mnałe litery

    std::cout
        << "d = " << d << std::endl;
    std::cout
        << "e = " << e << std::endl;

}

/* Output:
a = ["Pierwszy", "Drugi"]
b = ["Tekst testowy", "Tekst testowy"]
c = Test-first, Test-second
d = ["PIERWSZY", "DRUGI"]
e = ["pierwszy", "drugi"]
*/

.h文件:

#define MACRO1 using namespace oop;
//Makro !

#include <string>
#include <iostream>


namespace oop{

    class Data
    {
    public:
        Data(const char*);//Konstruktor ma przyjac const char* a nie string bo " text " to const char*
        Data(const Data&,const char*);
        Data();
        Data(const Data&);//dla linijki 35
        ~Data();


        void first_data(char* data);
        std::string first() const;
        const char* second()const;//to sie przyda
        std::string second(std::string data) const;
        //const char* full_data(const std::string data);
        void full_data(const std::string data);
        const char* full_data();
        Data to_upper(void) const;//const dodajesz tutaj zawsze jak nie zmieniasz obiektu zeby metoda dzialala na const obiekcie
        Data to_lower(void) const;

        friend std::ostream & operator <<(std::ostream & wypisz, const Data& data);


    private:
        const char* _text1;
        const char* _text2;

    };

    inline std::ostream & operator <<(std::ostream & wypisz, const Data& data)
    {return (wypisz<<"[\"" << data._text1 << " \", \" " << data._text2 << "\" ]");}

}
#endif

和.cpp中的函数

    #include <iostream>
#include "lab07.h"
#include <string>

//konstruktor*******************************************************************************************************
    oop::Data::Data(const char* c)
    {_text1=c;}

    oop::Data::Data(const Data& object,  const char* c)
    {
        _text1 = object._text1;
        _text2 = c;
    }

    oop::Data::Data(){} //tu chyba nic nie jest potrzebne
    oop::Data::Data(const Data& object)
    {
        _text1 = object._text1;
        _text2 = object._text2;
    }

    oop::Data::~Data(){} //tu chyba nic nie jest potrzebne

//funkcje*******************************************************************************************************
    void oop::Data::first_data(char* data){}

    std::string oop::Data::first()const
    {return std::string(" ");}

    std::string oop::Data::second(std::string data)const
    {return std::string(" ");}

   /* const char* oop::Data::full_data(const std::string data)
    {return " ";}*/
    void oop::Data::full_data(const std::string data)
    {
        int size = data.size();
        int space = data.find(' ');
        //_text1 = data.substr(0,space);
       // _text2 = data.substr(space,size);



    return ;}

    const char* oop::Data::full_data()
    {return " ";}

    oop::Data oop::Data::to_upper(void)const
    {return *this;}

    oop::Data oop::Data::to_lower(void)const
    {return *this;}

    const char* oop::Data::second()const
    {return " ";}

2 个答案:

答案 0 :(得分:0)

完成这一切的各种方法。这是两个:

快捷方式:stringstream

stringstream ss(data);
string tstr;
ss >> tstr;  // every call to >> reads one bunch of characters up to the first whitespace.

然后创建一个合适大小的char数组,将tstr复制到char数组中,并将char数组赋值给_text1。重复_text2。一个问题:像“快速的棕色狐狸”这样的字符串会变成“那个”,“快速”字符串的其余部分将丢失。

困难的方法:find和substr

string tstr;
size_t loc = data.find(' ');
if (loc != data.npos)
{
    tstr = data.substr(0, loc);
    //Copy tstr into _text1
    tstr = data.substr(loc + 1, data.npos);
    //Copy tstr into _text2
}

对于“快速棕狐”来说,这个更好一点。它会产生“the”和“quick brown fox”。

答案 1 :(得分:0)

这是你在找什么?: Split a string in C++?

有很多方法。

输出;应该输出什么?