如何使用类成员指针反转char数组?

时间:2014-02-04 23:20:22

标签: c++ pointers arrays

我试着使用指针作为类成员来反转数组:

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

class my_string
{
    char* ptr;
    int size;
public:
    my_string(){};
    my_string(char* str) : ptr(str),size(strlen(ptr)){};
    char* getstr () {return ptr;};
    void reverse();
    int find (char);
    void print();
};

void my_string::reverse()
{
     int size2=size;
     for (int i=0;i<(size/2);i++)
       {
           char tmp=ptr[i];
           ptr[i]=ptr[size2-1];
           ptr[size2-1]=ptr[i];
           size2--;
       }
}

int my_string::find(char c)
{
    for (int i=0;i<size;i++)
     {
        if (ptr[i]==c)
        return i;
     }
    return -1;
}

void my_string::print()
{
    for (int i=0;i<size;i++)
        cout<<ptr[i];
    cout<<endl;
}


int main()
{
    my_string s1("abcde");
    s1.print(); 
    s1.reverse();
    s1.print();
}

我没有得到任何错误,但反向功能肯定不起作用。 有人可以向我解释原因吗?

*这是一项家庭作业,要求我不要使用动态分配或字符串(暂时)。

2 个答案:

答案 0 :(得分:1)

你没有提到不能使用标准库算法,所以

std::reverse(ptr, ptr+size);

答案 1 :(得分:1)

您可以使用标头std::reverse中声明的标准算法<algorithm>。 例如

std::reverse( ptr, ptr + size );

但如果您想自己动手,那么该功能可以采用以下方式

void my_string::reverse()
{
     for ( int i = 0; i < size/2; i++ )
     {
           char tmp = ptr[i];
           ptr[i] = ptr[size-1-i];
           ptr[size-1-i] = tmp;
     }
}

测试程序

#include <iostream>
#include <cstring>

int main()
{
    char s[] = "123456789";
    char *ptr = s;
    int size = std::strlen( ptr );

    std::cout << s << std::endl;

    for ( int i = 0; i < size/2; i++ )
    {
              char tmp = ptr[i];
              ptr[i] = ptr[size-1-i];
              ptr[size-1-i] = tmp;
    }

    std::cout << s << std::endl;
}

输出

123456789
987654321