String的几个问题

来源:互联网 发布:淘宝图片下载器 编辑:程序博客网 时间:2024/05/19 16:37
1. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。
答案:
char *strcpy(char *strDest, const char *strSrc)
{
       if ( strDest == NULL || strSrc == NULL)
                return NULL ;
       if ( strDest == strSrc)
                return strDest ;
       char *tempptr = strDest ;
       while( (*strDest++ = *strSrc++) != ‘/0’);  //把strSrc的值赋给strDest,再判断是否到达串尾
                return tempptr ;
}

2. 已知String类定义如下:
class String
{
public:
            String(const char *str = NULL); // 通用构造函数
            String(const String &another); // 拷贝构造函数
            ~ String(); // 析构函数
            String & operater =(const String &rhs); // 赋值函数
private:
            char *m_data; // 用于保存字符串
};
尝试写出类的成员函数实现。


答案:
String::String(const char *str)
{
             if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断
             {
                      m_data = new char[1] ;
                      m_data[0] = '/0' ;
             }

            else
             {
                      m_data = new char[strlen(str) + 1];
                      strcpy(m_data,str);
              }
}

String::String(const String &another)
{
            m_data = new char[strlen(another.m_data) + 1];
            strcpy(m_data,other.m_data);

}

String& String::operator =(const String &rhs)
{
            if ( this == &rhs)
                  return *this ;
            delete []m_data; //删除原来的数据,新开一块内存
            m_data = new char[strlen(rhs.m_data) + 1];
            strcpy(m_data,rhs.m_data);

            return *this ;
}

String::~String()
{
          delete []m_data ;

}

3.输入一个字符串,将其逆序后输出。(使用C++,不建议用伪码)

#include <iostream>
using namespace std;
void main()
{
       char a[50];

       memset(a,0,sizeof(a));//初始化a,置0

       int i=0,j;
       char t;
       cin.getline(a,50,'\n');//往a输入50个字符,以回车结束
       for(i=0,j=strlen(a)-1;i<strlen(a)/2;i++,j--)
       {
              t=a[i];
             a[i]=a[j];
             a[j]=t;
        }
       cout<<a<<endl;
}

//第二种
       string str;
       cin>>str;
       str.replace;
       cout<<str;



原创粉丝点击