字符串的操作



#pragma once
#define _STRING_H_
#include<stdlib.h>
#include<iostream>
using namespace std;

#define Maxsize 255
typedef struct
{
 char *ch;
}sstring;

void InitString(sstring *s)
{
 s->ch = (char *)malloc(sizeof(char)*(Maxsize+1));
 s->ch[0] = Maxsize;
}

//给字符串赋值
void StrAssign(sstring *s, char *ch)
{
 unsigned int i = 1;
 unsigned int j = 0;
 while (i <= s->ch[0] &&  ch[j]!= '\0')
 {
  s->ch[i] = ch[j];
  i++;
  j++;
 }
 s->ch[i] = '\0';
}

//将串s清为空串
void ClearStr(sstring *s)
{
 s->ch[1] = '\0';
}

//比较两个字符串的大小
int StrCompare(sstring s, sstring t)
{
 int i = 1;
 while (s.ch[i] != '\0' && t.ch[i]!= '\0')
 {
  if (s.ch[i] > t.ch[i])
  {
   return 1;
  }
  else if (s.ch[i] < t.ch[i])
  {
   return -1;
  }
  else
  {
   i++;
  }

 }
 if (s.ch[i] == '\0' && t.ch[i] == '\0')
 {
  return 0;
 }
 if (s.ch[i] == '\0')
 {
  return -1;
 }
 if (t.ch[i] == '\0')
 {
  return 1;
 }
}

//拷贝字符串
void StrCopy(sstring *s, sstring t)
{
 unsigned int i = 1;
 while (i <= s->ch[0] && t.ch[i] != '\0')
 {
  s->ch[i] = t.ch[i];
  i++;
 }
 s->ch[i] = '\0';
}

//求字符串的长度
int StrLength(sstring s)
{
 return s.ch[0];
}

//销毁字符串
void DestoryString(sstring *s)
{
 free(s->ch);
}

//字符串的链接
void StrConcat(sstring *t, sstring s1, sstring s2)
{
 unsigned int i = 1;
 unsigned int j = 1;
 while (i <= t->ch[0] && s1.ch[i] != '\0')
 {
  t->ch[i] = s1.ch[i];
  i++;
 }
 while (i <= t->ch[0] && s2.ch[j] != '\0')
 {
  t->ch[i] = s2.ch[j];
  i++;
  j++;
 }
 t->ch[i] = '\0';
}

//判断字符串是否为空
bool StrEmpty(sstring s)
{
 if (s.ch[1] == '\0')
 {
  return true;
 }
 return false;
}

//返回s中从pos起长度为len的子串
void SubString(sstring *sub, sstring s,unsigned  int pos, int len)
{
    int j = 1;
 if(pos>=1 && pos<=s.ch[0] && len >=0 && len <=s.ch[0]-pos+1)
 {
  for(int i = pos;i < pos+len;i++)
  {
   sub->ch[j] = s.ch[i];
   j++;
  }
 }
 sub->ch[j] = '\0';
}

int GetLen(sstring s)
{
 int i = 1;
 while(s.ch[i] != '\0')
 {
  i++;
 }
 return i-1;
}

//查找pos后首次出现子串的位置
int  IndexPos(sstring s,sstring t,int pos)
{
 int lent = GetLen(t);
 int lens = GetLen(s);
 int i = pos;
 int j = 1;
 if(pos >= 1 && pos +lent <= lens)
 { 
  j = 1;
  for(i;i+lent <= lens;i++)
  {
   for(j;j <= lent;j++)
   {
    if(t.ch[j] == s.ch[i])
    {
     i++;
    }
    else
    {
     i=i-j+2;
     break;
    }
   }
   if(j > lent)
   {
    return i-j+1;
   }
  }
  return -1;
 }
 return -1;
}
//用V替换主串中的t子串
void Replace(sstring *s, sstring t, sstring v)
{
 int i = 1;
 int lenv = GetLen(v);
 int lens = GetLen(*s);
 int lent = GetLen(t);
 while(i+lent < lens)
 {
  int pos = IndexPos(*s,t,i);
  if(pos > 0)
  {
   for(int j = 1;j <=lenv;j++ )
   {
    s->ch[j+pos] = v.ch[j];
   }
  }
  i = pos + lenv;
 }

}

//插入子字符串
bool StrInsert(sstring *s, unsigned int pos, char *elem)
{
 int lenT = GetLenChar(elem);
 int lenS = GetLen(*s);
 int j = 0;
 unsigned int i = pos;
 if(pos <= 0 || pos >lenS )
 {
  return false;
 }
 if(pos + lenT > s->ch[0])
 {
  for(i; i <= s->ch[0];i++)
  {
   s->ch[i] = elem[j];
   j++;
  }
  s->ch[i] = '\0';
  return false;
 }
 for(j;j <= lenT;j++)
 {
  s->ch[i] = elem[j];
  i++;
 }
 return true;
}

//删除字符串
bool StrDelete(sstring *s, int pos, int len)
{
 int lenS = GetLen(*s);
 if(pos < 1 || pos > lenS || pos +len > lenS)
 {
  return false;
 }
 int i = pos + len+1;
 for(i;i <=  lenS;i++)
 {
  s->ch[i-len] = s->ch[i];
 }
 s->ch[i-len] = '\0';
 return true;
}

//打印字符串
void PrintStr(sstring s)
{
 int i = 1;
 while(s.ch[i] != '\0')
 {
  cout<<s.ch[i]<<" ";
  i++;
 }
 cout<<endl;
}

//首尾比较法
int IndexHeadtail(sstring *s, sstring  *t)
{
 unsigned int i = 1;
 unsigned int j = 1;
 for (i = 1; i < s->ch[0]; i++)
 {
  if(i + t->ch[0] - 1 < s->ch[0])
  {
   if (s->ch[i] == t->ch[j] && s->ch[i + t->ch[0] - 1] == t->ch[t->ch[0] - 1])
   {
    i++;
    for (j = 2; j < t->ch[0] - 1; j++)
    {
     if (s->ch[i] == t->ch[j])
     {
      i++;
      j++;
     }
    }
   }
   if (j == t->ch[0] - 1)
   {
    return i - j + 1;
   }
   i = i - j + 2;
  }  
 }
 return -1;
}

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值