C++程序设计实践指导1.9统计与替换字符串中的关键字改写要求实现

改写要求1:将字符数组str改为字符指针p,动态开辟存储空间

改写要求2:增加统计关键字个数的函数void CountKeyWords()

改写要求3: 增加替换函数void FindKeyWords()

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

class WORDNUM
{
      char *p;
      double c;
      public:
             WORDNUM(char *s)
             {
                 p=new char[strlen(s)];
                 strcpy(p,s);
                 c=0;
             }
             void process();
             void CountKeyWords(string key[],int len);
             void FindKeyWords(string key[],string swapkey[],int len);
             void print()
             {
                  char* r=new char[strlen(p)];
                  strcpy(r,p);
                  while(*r!=‘\0‘)
                  cout<<*(r++);
                  cout<<endl;
                  cout<<"num="<<c<<endl;
             }
};

void WORDNUM::CountKeyWords(string key[],int len)
{
     int i=len;
     while(i)
     {
     double sameword=0;
     char* r=new char[strlen(p)];
     strcpy(r,p);
     char* q=new char[key[i-1].length()];
     strcpy(q,key[i-1].c_str());
     char* find=strstr(r,q);
     while(find)
     {
            memset(find, ‘ ‘, strlen(q));
            sameword++;
            find=strstr(find,q);

     }

     cout<<key[i-1]<<"的个数为:"<<sameword<<"占全部字符"<<(sameword/c)*100<<"%"<<endl;
     i--;
     }
}

void WORDNUM::FindKeyWords(string key[],string swapkey[],int len)
{
   int i=len;
   string temp;
   temp=p;
   int pos=temp.find(key[i-1]);
   while(i)
   {
     while(pos!=-1)
     {
            temp.replace(pos,key[i-1].length(),swapkey[i-1]);
            pos=temp.find(key[i-1]);

     }
     i--;
   }
   memset(p,0,sizeof(p));
   strcpy(p,temp.c_str());
}

void WORDNUM::process()
{
     int word=1;
     int len;
     len=strlen(p);
     char* r=new char[strlen(p)];
     strcpy(r,p);
     for(int i=0;i<len;i++)
     {
             if(((r[i]>=‘a‘&&r[i]<=‘z‘)||(r[i]>=‘A‘&&r[i]<=‘Z‘))&&word)
             {
                   c++;
                   word=0;
             }
             else if(r[i]==‘ ‘)
                      word=1;
     }
}

int main(int argc, char *argv[])
{
    string key[2]={"nice","girl"};
    string swapkey[2]={"ugly","boy"};
    int len=sizeof(key)/sizeof(key[0]);
    string str="She is a nice nice girl girl girl hi";
    char* split=new char[strlen(str.c_str())];
    strcpy(split,str.c_str());
    WORDNUM w(split);
    w.process();
    w.CountKeyWords(key,len);
    w.print();
    w.FindKeyWords(key,swapkey,len);
    w.print();
    system("PAUSE");
    return EXIT_SUCCESS;
}
时间: 2024-11-04 19:12:40

C++程序设计实践指导1.9统计与替换字符串中的关键字改写要求实现的相关文章

【华为OJ平台练习题】统计一段字符串中含有空格、英文、数字的个数

//统计一段字符串中含有空格.英文.数字的个数 #include <iostream> using namespace std; void processString(char* s) { int n = strlen(s); int kg=0; int shuzi=0; int yingwen=0; if(n>0) { for(int a=0;a<n;a++) { if(s[a]==' ') kg++; if(s[a]<='9'&&s[a]>='0')

统计一段长字符串中某字符串的出现次数

截取字符串统计字符串出现次数 通过替换字符串,统计字符串出现次数 通过正则表达式,统计字符串出现次数 package constxiong.interview; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 统计一段长字符串中某字符串的出现次数 * @author ConstXiong * @date 2019-11-13 11:01:22 */ public class TestCountWordTi

C++程序设计实践指导1.14字符串交叉插入改写要求实现

#include <cstdlib>#include <iostream>#include <cstring> using namespace std;class STRING{ char *str1; char *str2; public: STRING(char* s1,char* s2) { str1=new char[strlen(s1)]; str2=new char[strlen(s2)]; strcpy(str1,s1); strcpy(str2,s2);

C++程序设计实践指导1.13自然数集中找合数改写要求实现

改写要求1:用单链表实现 改写要求2:析构函数中依次将链表结点删除 #include <cstdlib> #include <iostream> using namespace std; struct LinkNode { int data; LinkNode* next; }; class NOPRIME { friend struct LinkNode; LinkNode* Head; int n; public: NOPRIME(int n1) { n=n1; } void

C++程序设计实践指导1.10二维数组元素换位改写要求实现

改写要求1:改写为以单链表和双向链表存储二维数组 改写要求2:添加函数SingleLinkProcess()实现互换单链表中最大结点和头结点位置,最小结点和尾结点位置 改写要求3:添加函数DoubleLinkProcess()实现互换双向链表中最大结点和头结点位置,最小结点和尾结点位置 #include <cstdlib> #include <iostream> using namespace std; #define M 3 #define N 4 struct SingleLi

C++程序设计实践指导1.12数组中数据线性变换改写要求实现

改写要求1:分别用指针pa.pb代替数组 改写要求2:从键盘输入data元素 元素个数任意,输入0结束 #include <cstdlib> #include <iostream> using namespace std; class DATA { double *pa,*pb; double max,min; double new_max,new_min; int length; public: DATA(double a1[],double x,double y,int len

C++程序设计实践指导1.15找出回文数改写要求实现

改写要求1:用单链表实现 #include <cstdlib> #include <iostream> using namespace std; struct LinkNode { int data; LinkNode *next; }; class PALINDROME { int low,up; int a[100]; int count; public: PALINDROME(int t1,int t2); int IsPalin(int x); LinkNode* IsPa

C++程序设计实践指导1.6超长数列中n个数排序改写要求实现

改写要求1:将以上程序改写为适合超长整数 改写要求2:将以上程序改写为适合超长数列 改写要求3:将数列中指定位置m开始的n个结点重新按降序排序 改写要求4:输出指定位置m开始的n个结点的超长整数 #include <cstdlib> #include <iostream> #include <string> using namespace std; struct LongIntegerNode { short int data; LongIntegerNode *nex

C++程序设计实践指导1.3求任意整数降序数改写要求实现

改写要求1:动态生成单链表存储 #include <cstdlib> #include <iostream> using namespace std; struct LinkNode { int data; struct LinkNode *next; }; class NUM { int n; public: NUM(int x) { n=x; } struct LinkNode * descrease(); void show(LinkNode* pHead) { LinkNo