当前位置:编程学习 > C/C++ >>

C++语句解释

#include <iostream>

#include <string>

#include <malloc.h>

using namespace std;

#define N 5

struct List

{

 string line;

 struct List *next;

}list;

 

struct List * creat(struct List *head)

{

 head = NULL;

 

 return head;

}

 

struct List *Insert(struct List *head,string str)

{

 struct List *p;

 struct List *q;

 q = head;

 p = new struct List;

 p->line = str;

 p->next = NULL;

 

 

 if (head == NULL)

 {

 

  head = p;

 }

 

 else

 {

  while (q->next != NULL)

  {

   q = q->next;

  }

  q->next = p;

 }

 

 

 return head;

}

 

void  Count(struct List *head,int &alph,int &digital,int &space,int &total)

{

 struct List *p = head;

 int i;

 if (head == NULL)

 {

  return ;

 }

 

 else

 {

  while (p != NULL)

  {

   total += p->line.length();

   for (i = 0; i < p->line.length(); ++i)

   {

 

    if (isalpha(p->line[i]))

    {

     ++alph;

    }

 

    else if (isdigit(p->line[i]))

    {

     ++digital;

    }

 

    else

    {

     if (isspace(p->line[i]))

     {

      ++space;

     }

    }

   }

 

   p = p->next;

 

  }

 }

}

 

 

int CountStr(struct List *head, string str)

{

 int sum = 0;

 struct List *p = head;

 int pos;

 

 if (head == NULL)

 {

  return -1;

 }

 

 while (p != NULL)

 {

  pos = p->line.find(str);

  while (pos  != -1)

  {

   ++sum;

 

   pos = p->line.find(str,pos+str.length());

  }

  p = p->next;

 }

 

 return sum;

}

 

struct List *Del(struct List *head,string str)

{

 struct List *p = head;

 int pos;

 

 if (head == NULL)

 {

  return NULL;

 }

 

 else

 {

  while (p != NULL)

  {

   pos = p->line.find(str);

   while (pos  != -1)

   {

    p->line = p->line.erase(pos,str.length());

   

    pos = p->line.find(str);

   }

      p = p->next;

 

  }

 }

 

 return head;

}

 

void Print(struct List *head)

{

 struct List *p,*q;

 p = head;

 while (p != NULL)

 {

  cout<<p->line<<endl;

  q = p->next;

  p = q;

 }

}

 

void Free(struct List *head)

{

 struct List *p = head;

 struct List *q;

 

 while (p != NULL)

 {

  q = p->next;

  delete p;

  p = q;

 }

}

int main()

{

 

 int i;

 int alph = 0;

 int space = 0;

 int total = 0;

 int digital = 0;

 int count;

 string str;

 string ss = "aa";

 struct List *head;

 head = creat(head);

 for (i = 0; i < N; ++i)

 {

  cout<<"please input a string:\n";

     fflush(stdin);

  getline(cin,str);

 

 

  head = Insert(head,str);

 

 }

 

 Print(head);

 

 cout<<"------------------------------------------------\n";

    Count(head,alph,digital,space,total);

 cout<<"全部字母数: "<<alph<<endl;

 cout<<"数字个数: "<<digital<<endl;

 cout<<"空格个数: "<<space<<endl;

 cout<<"文章总字数: "<<total<<endl;

    cout<<"------------------------------------------------\n";

 count = CountStr(head,ss);

 cout<<ss<<"次数:"<<count<<endl;

 

    cout<<"------------------------------------------------\n";

  head = Del(head,ss);

 Print(head);

 Free(head);

 return 0;

}

答案:#include <iostream>  //包含标准输入输出流

#include <string>   //包含字符串流
                
#include <malloc.h>   //包含与内存分配有关的头文件

using namespace std;    //使用域名空间std

#define N 5            // 宏定义 N 5

struct List          //结构类型List

{

 string line;        //字符串类对象

 struct List *next;  //指向字符串类对象的指针

}list;               //创建一个全局的List对象list

 

struct List * creat(struct List *head)  //返回值为List指针的函数,其参数也是一个指向List结构的指针

{                                       //用来创建一个空的list结构的链表

 head = NULL;   //头指针初始值为空

 

 return head;  //返回指针初始值

}

 

struct List *Insert(struct List *head,string str)    //返回值为List指针的函数,其参数也是一个指向List结构的指针
                                                 //和一个字符串对象。用以在链表head中插入包含str的节点
{

 struct List *p;       // 创建LIst类对象p

 struct List *q;

 q = head;             // q获得头指针

 p = new struct List;  //创建一个List对象并赋给p 

 p->line = str;        // p中的line成员被赋值为形参str

 p->next = NULL;       // p中的next成员被赋值为空

 

 

 if (head == NULL)    // 若头指针指向的队列本来为空

 {

 

  head = p;          // 将刚创建的List对象赋给head,成为head中的第一个节点

 }

 

 else               // 否则

 {

  while (q->next != NULL)   //找到当前链表的末尾节点

  {

   q = q->next;           

  }

  q->next = p;            //将当前节点至于链表末尾

 }

 

 

 return head;           //返回头结点

}

 

void  Count(struct List *head,int &alph,int &digital,int &space,int &total)

{      // 技术函数

 struct List *p = head;     //保存头结点

 int i;

 if (head == NULL)           // 若链表为空

 {

  return ;                 //返回

 }

 

 else                     //否则

 {

  while (p != NULL)         //当链表没有结束

  {

   total += p->line.length(); // 求所有字符串的长度之和

   for (i = 0; i < p->line.length(); ++i)  //统计所有字符串中的字母个数

   {

 

    if (isalpha(p->line[i]))           //若当前字符为字母

    {

     ++alph;

    }

 

    else if (isdigit(p->line[i]))      //若当前字符为数字

    {

     ++digital;

    }

 

    else                   //若当前字符为空格

    {

     if (isspace(p->line[i]))

     {

      ++space;

     }

    }

   }

 

   p = p->next;                //下一个节点

 

  }

 }

}

 

 

int CountStr(struct List *head, string str)

{    //在链表中查找str,返回找到的个数,若没有则返回-1

 int sum = 0;

 struct List *p = head;     //获取链表的头结点

 int pos;

 

 if (head == NULL)         //若链表为空

 {

  return -1;                //返回-1

 }

 

 while (p != NULL)         //当链表不为空时

 {

  pos = p->line.find(str);   //在p->line中查找str所在位置,若没有找到则值为-1

  while (pos  != -1)        //当找到pos时

  {

   ++sum;        //记录str的个数

 

   pos = p->line.find(str,pos+str.length());      //查找下一个str

  }

  p = p->next;               //下一个节点

 }

 

 return sum;         //返回str的个数

}

 

struct List *Del(struct List *head,string str)

{   //在链表head中删除str子串

 struct List *p = head;      //获取头指针

 int pos;

 

 if (head == NULL)           //若链表为空

 {

  return NULL;               //返回空

 }

 

 else                          //否则

 {

  while (p != NULL)           //链表没有结束

  {

   pos = p->line.find(str);    //在节点中查找str

   while (pos  != -1)         //找到str

   {

    p->line = p->line.erase(pos,str.length());   //删除str

   

    pos = p->line.find(str);    //查找下一个str

   }

      p = p->next;            //下一个节点

 

  }

&nbs

上一个:C和C++有什么本质区别?
下一个:Borland C++ Compiler 5.5.1怎么打开?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,