2015-02-11 64 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隐含