2015-05-28 87 views
-4

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

下面的代码: 主(它是由老师给出)

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 " ";} 
+0

请问你能否改变成英文? –

+0

它提供了什么输出,你期望什么? – b4hand

+0

@ b4hand my psychic powers predict:/ *输出: a = [“Pierwszy”,“Drugi”] b = [“Tekst testowy”,“Tekst testowy”] c = Test-first,Test-second d = [“PIERWSZY”,“DRUGI”] e = [“pierwszy”,“drugi”] */ – user4581301

回答

0

整串的方法来做到这一点。这里有两个:

快速方式:字符串流

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

然后使适当大小的字符数组,复制TSTR流入焦炭阵列,并分配char数组到_text1。重复_text2。一个问题:像“快速棕色狐狸”这样的字符串会变成“the”,而“quick”字符串的其余部分将会丢失。

难的方法:找到并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 
} 

这一个是为“敏捷的棕色狐狸”情况会好一点。它会产生“这个”和“快速的棕色狐狸”。