创建一个简单的C ++字符串类

时间:2015-02-11 20:27:00

标签: c++ string class

我正在编写一个程序,我在其中创建自己的字符串类。该程序应该指示用户编写一个句子,复制输入,然后显示它包含的字符数。

虽然它确实构建并编译(使用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;
}

解决:

我让程序正常运行。我实际上只是在实现中用*character替换了两个_String参数。我知道它与函数传递有关,我确实得到了一些帮助。但是有一个人没有提供任何有用的意见(并且实际上侮辱了我),并且两人都说有太多东西需要修理&#34;。关于&#34;这么多事情的一些阐述&#34;我不得不修理会很好。

1 个答案:

答案 0 :(得分:2)

在几乎所有函数中,你使用函数的{em>参数,_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传递一个指向当前对象的指针