2015-02-11 47 views
-2

我正在寫一個程序,我創建自己的字符串類。該程序應該指示用戶寫一個句子,複製輸入,然後顯示它包含的字符數。解決:我需要幫助創建一個簡單的C++字符串類

儘管它構建和編譯(使用Visual Studio Express 2013),但它會複製用戶被指示寫下的句子,而不顯示字符數量,然後崩潰。

我猜是與如何動態分配內存或如何*功能之間傳遞*字符和_String有關。但是,如何解決這個問題或改進我的代碼會有幫助。

頁眉:STRING.H

class String 
{ 
private: 
    char *characters[50]; // 50 is just a placeholder to get it to work 
    int size; 
public: 
    // Constructors and Destructors 
    String(); 
    String(char*); 
    ~String(); 

    // Other functions 
    void stringAssign(char*); 
    void printString(char*); 
    int stringSize(char*) const; 
}; 

實現:String.ccp

#include "String.h" 
#include <iostream> 
#include <cstring> 

String::String() 
{ 
    size = 0; 
    * characters = 0; 
} 

String::String(char* _String) 
{ 
    size = stringSize(*characters + 1); 
    _String = new char[size]; 
} 

String::~String() 
{ 
    delete [] *characters; 
} 

void String::stringAssign(char* _String) 
{ 
    _String = characters[size]; 
} 

void String::printString(char* _String) 
{ 
    for (int i = 0; _String[i] != '\0'; i++) 
     std::cout << _String[i]; 
} 

int String::stringSize(char* _String) const 
{ 
    int size; 
    size = strlen(*characters); 
    return size; 
} 

測試:Main.ccp

#include "String.h" 
#include <iostream> 

int main() 
{ 
    char string[50]; 
    String s; 

    std::cout << "Enter a sentence that is less than 50 characters\n\n"; 
    std::cin.getline(string, 50); 

    s.printString(string); 
    std::cout << s.stringSize(string); 

    return 0; 
} 

更新:

我得到了程序的工作。從字面上看,我所做的只是在執行過程中用_String取代了兩個*character參數。我知道這與函數傳遞有關,我確實得到了一些幫助。但有一個人沒有提供有用的信息(並且實際上侮辱了我),並且都表示「有太多事情需要解決」。對我必須解決的「很多事情」的一些闡述會很好。

+6

[我有一個夢!](http://dev-jungle.blogspot.de/2015/02/i-have-dream-im-dreaming-of-so-called-c.html) – 2015-02-11 20:28:40

+5

你有沒有嘗試先閱讀關於C++的一些信息?這是一種語言,試圖通過實驗學習是一個可怕的想法,原因有幾個...... – 6502 2015-02-11 20:30:47

+0

我認爲你可能需要從基礎知識入手,找到一本關於C++的優秀教程,書籍或課程。 – crashmstr 2015-02-11 20:36:56

回答

2

在幾乎所有的功能,你做的功能,_String論證的東西,而不是與一個應該在內部保持字符串成員字段characters。所以你的函數不要更改字符串,而是試圖弄亂你通過它們的東西。

一個例子

struct Foo { 
    char internal[42]; 
    void bar(char *external) { external[0] = 'X'; } 
    void qux(char *external) { internal[0] = 'Z'; } 
}; 
int main() { 
    Foo foo; 
    char something[6] = "Hello"; 
    foo.qux(something); // Did something to the member variable foo.internal; variable something is unchanged. 
    foo.bar(something); // Now something reads "Xello", foo.internal was not changed. 
} 

您的代碼也幾乎與功能bar而它應該像qux

在這段代碼中確實有太多的問題需要解決。

萬一你弄錯了......不像一些其他語言,比如Python或Smalltalk中,C++將指針傳遞到當前對象通過this隱含