1579103680 发表于 2020-2-17 11:13:55

求助一道C++题目

本帖最后由 1579103680 于 2020-2-17 14:42 编辑

定义一个字符串类 CString,并设计一个算法实现,给定关键字 str1 在字符串 str 中出现时用关键字 str2 进行替换的功能。

具体要求如下:

(1)私有数据成员

char *str;   原始字符串。

char *str1;目标关键字。

char *str2;替换关键字。

int flag;标记替换是否完成替换。

(2)公有成员函数

CString (char *s,char s1[ ],char *s2) :用给定的参数s、s1 和s2 相对应的初始化数据成员str、str1 和str2。flag设置缺省 0。

void Replace () :判断str字符串中是否出现str1,若出现就用str2 替换,否则什么都不做。若替换成功了标记flag为 1,若替换不成功则标记flag为 0。

void Show( ) :若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串。

~ CString() :释放动态分配的空间。

(3)在主程序中定义字符串char s[]=”I am a student, you are student too, we are all student.” 作为原始字符串,定义char s1[]=” student”作为目标关键字,定义char s2[]=”teacher” 作为替换关键字。定义一个CString类对象test,用s,s1 和s2 初始化test,完成对该类的测试。

东辰木 发表于 2020-2-17 17:44:05

#include <iostream>
#include <string.h>

using namespace std;

class CString
{
public:
    CString(char *s, char s1[], char *s2);
    void Replace();
    void Show();
    ~CString();
   
private:
    char *str;
    char *str1;
    char *str2;
    int flag;
};


CString::CString(char *s, char s1[], char *s2)
{
    str = new char;
    str1 = new char;
    str2 = new char;
   
    strcpy(str, s);
    strcpy(str1, s1);
    strcpy(str2, s2);
   
    flag = 0;
   
}

void CString::Replace()
{
    char *temp1 = str1;
    char *temp_str = str;
    while (*temp_str!='\0')
    {
      while(*temp_str == *temp1)
      {
            temp_str++;
            temp1++;
            if(*temp1 == '\0')
            {
                flag = 1;
               
                char *r_str = new char;
                strcpy(r_str, temp_str);      //取出要目标字符串后面的字符串
                char *l_str = temp_str-strlen(str1);    //指向目标字符串
                strcpy(l_str, str2);            //复制替换目标字符串
                strcat(l_str, r_str);         //拼接两段字符串
                temp_str = temp_str-strlen(str1)+strlen(str2)-1;//temp_str指向替换了的字符串末尾
                delete[] r_str;
            }
      }
      if(strlen(temp_str)<strlen(str1))
            break;
      temp_str++;
      temp1 = str1;
    }
}

void CString::Show()
{
    if(flag == 1)
    {
      cout << "目标关键字:" << str1 <<endl;
      cout << "替换关键字:" << str2 << endl;
      cout << "替换字符串:" << str << endl;
    }
    else
    {
      cout << "原始字符串:" << str << endl;
    }
}

CString::~CString()
{
    if (str != NULL) {
      delete[] str;
      str = NULL;
    }
    if (str1 != NULL) {
      delete[] str1;
      str1 = NULL;
    }
    if (str2 != NULL) {
      delete[] str2;
      str2 = NULL;
    }
}

int main(int argc, const char * argv[]) {
   
    char s[] = "I am a student, you are student too, we are all student.";
    char s1[] = "student";
    char s2[] = "teacher";
   
    CString test(s, s1, s2);
   
    test.Replace();
    test.Show();
   
   
    return 0;
}

1579103680 发表于 2020-2-17 18:19:47

东辰木 发表于 2020-2-17 17:44


非常感谢大佬{:5_110:}
页: [1]
查看完整版本: 求助一道C++题目