#include<stdio.h>
#include<stdlib.h>typedef struct Cstring
{char *p;//字符串int nLength;//字符串实际长度(+'\0')
}mystring;
int mystrlen(char *str)//字符串长度
{int length=0;if(str==NULL)//字符串为空返回-1{return -1;}while(*str!='\0')//判断字符串是否到结尾{str++;//指针移动length++;//长度+1}return length; //返回字符串长度
}
char *mystrcpy(char *str,char *copystr)//拷贝字符串
{char *strbak=str;//记录首地址if(str==NULL||copystr==NULL)//字符串为空返回{return NULL;}while(*copystr!='\0')//判断要拷贝的字符串是否到结尾{*str=*copystr;//拷贝字符str++;//指针移动copystr++;}*str='\0';//字符串结尾return strbak;//返回首地址
}
char *mystrcat(char *allstr,char *str)//链接字符串
{char *allstrbak=allstr;//记录字符串首地址if(allstr==NULL||str==NULL)//字符串为空返回空{return NULL;}while(*allstr!='\0')//要拷贝的字符串走到最后'\0'{allstr++;//指针移动}while(*str!='\0'){*allstr=*str;//字符串拷贝allstr++;str++;}*allstr='\0';//字符串结尾return allstrbak;//返回首地址
}char *mystrchr(char *allstr,char ch)//查找字符
{if(allstr==NULL)//字符串为空返回空{return NULL;}while(*allstr!='\0')//遍历字符串{if(*allstr==ch)//判断是否找到{return allstr;//返回地址}allstr++;//指针移动}return NULL;//没找返回空
}
char *mystrstr(char *allstr,char *str)//查找字符串
{char *allstrbak=allstr;//记录长串的首地址char *strbak=NULL;char *nowallstrbak=NULL;int flag;if(allstr==NULL||str==NULL)//字符串为空返回空{return NULL;}while(*allstrbak!='\0')//遍历长字符串匹配{nowallstrbak=allstrbak;//从长字符串每一个字母作为开始strbak=str;//记录短字符串的首地址flag=1;//假定是匹配成功的while(*strbak!='\0'&&*nowallstrbak!='\0')//从某一个长字符串的地址开始,从短字符串首地址开始遍历{if(*strbak!=*nowallstrbak)//如果不等{flag=0;//停止break;}strbak++;//指针移动nowallstrbak++;}if(flag==1)//如果匹配成功{return allstrbak;//返回首地址}allstrbak++;//改变从长字符串的地址开始}return NULL;//匹配不成功,返回空
}
void init(mystring *string)
{string->p=NULL;string->nLength=0;
}
void initwithlength(mystring *string,int length)
{string->p=(char *)malloc(sizeof(char)*length);string->nLength=length;
}
void initwithstring(mystring *string,char *copystring)
{int length=mystrlen(copystring);//要初始化字符串长度string->p=(char *)calloc(length+1,sizeof(char));//分配内存(字符串长度+'\0‘)mystrcpy(string->p,copystring);//拷贝字符穿string->nLength=length+1;//字符串实际长度(+'\0')
}
void backaddchar(mystring *string,char ch)//在字符串后面添加一个字符
{if(mystrlen(string->p)+1==string->nLength)//要拷贝的字符串长度+1(就是+'\0')==字符串的实际长度,意味满了{string->p=(char *)realloc(string->p,string->nLength+1);//重新分配内存,见其实际长度+1(加一个字符的长度)string->nLength+=1;//字符串的长度+1(注意要首先+1)string->p[string->nLength-2]=ch;//数组下表与实际长度要-1string->p[string->nLength-1]='\0';}else{int length=mystrlen(string->p);//字符串长度string->p[length]=ch;//储存字符string->p[length+1]='\0';//结尾}
}
void backaddstring(mystring *string,char *str)//在字符串后面添加字符串
{int nowmystringlength=mystrlen(string->p);//现在字符串长度(没加'\0')int addstringlength=mystrlen(str);//需要增加字符串长度(没加'\0')if(nowmystringlength+addstringlength+1>string->nLength)//判断字符串长度是否足够{int needaddstringlength=nowmystringlength+addstringlength+1-string->nLength;//需要增加字符串长度string->p=(char *)realloc(string->p,string->nLength+needaddstringlength);//重新分配内存mystrcat(string->p,str);//连接字符串string->nLength+=needaddstringlength;//字符串实际长度+增加长度}else{mystrcat(string->p,str);//够长连接字符串}
}
char *findfirstchar(mystring *string,char ch)//查找第一个字符的地址
{char *p=mystrchr(string->p,ch);return p;
}
char *findfirststr(mystring *string,char *str)//查找第一个字符串的地址
{char *p=mystrstr(string->p,str);return p;
}
int deletefirstchar(mystring *string,char ch)//删除第一个字符串
{char *p=mystrchr(string->p,ch);//找到第一个相同首字母的地址if(p==NULL)//没找到返回0{return 0;}else{char *pNext=p+1;//记录要删除字符的下一个字母的地址while(*pNext!='\0')//字符整体向前移动{*p=*pNext;//赋值p++;//指针移动pNext++;}*p='\0';//pNext到结尾时停止,字符串要有结尾string->nLength-=1;//字符串实际长度-1return 1;}
}
int deletefirststring(mystring *string,char *str)//删除第一个相同的字符串
{char *p=mystrstr(string->p,str);//找到第一个相同字符串的首地址char *pNext=NULL;int length; if(p==NULL)//没找到返回0{return 0;}else{length=mystrlen(str);//要删除字符串的长度pNext=p+length;//找到要移动位置的地址while(*pNext!='\0')//字符串向前移动{*p=*pNext;//赋值p++;//指针移动pNext++;}*p='\0';//字符串结尾string->nLength-=length;//字符串实际长度-删除字符串长度return 1;}
}
void changefirstchar(mystring *string,char oldchar ,char newchar)//改变第一个与oldchar相同的字符,改变为newchar
{char *pstr=string->p;//记录字符串的首地址while(*pstr!='\0')//遍历字符串{if(*pstr==oldchar)//如果与oldchar相同{*pstr=newchar;//改变字符return ;//跳出循环,返回}pstr++;//指针移动}
}
void addchar(mystring *string,char ch,char *pos)
{int nowlength,movelength;//nowlength字符串长度movelength从pos位置后面要移动的长度int i;if(pos==NULL||string==NULL)//如果位置为空或者字符串为空返回{return  ;}if(mystrlen(string->p)+1==string->nLength)//字符串长度+'\0'是否等于字符串实际长度(看是否满了){string->p=(char *)realloc(string->p,string->nLength+1);//重新分配内存string->nLength+=1;//字符串实际长度+1nowlength=mystrlen(string->p);movelength=mystrlen(pos);for(i=nowlength;i>nowlength-movelength;i--){string->p[i]=string->p[i-1];//移动不包括'\0'}string->p[nowlength-movelength]=ch;//添加字符串string->p[nowlength+1]='\0';//字符串结尾}else{nowlength=mystrlen(string->p);movelength=mystrlen(pos);for(i=nowlength;i>nowlength-movelength;i--){string->p[i]=string->p[i-1];}string->p[nowlength-movelength]=ch;string->p[nowlength+1]='\0';}
}
void run(mystring *string)//执行指令
{system(string->p);
}
void printfstring(mystring *string)//打印字符串
{printf("%s\n",string->p);
}
void main()
{mystring string;char *findch=NULL;char *findstr=NULL;int ok;int flag;char *pos;initwithstring(&string,"note");//backaddchar(&string,'d');//在后面添加字符backaddstring(&string,"pad5");//在后面添加字符串ok=deletefirstchar(&string,'d');changefirstchar(&string,'5','d');deletefirstchar(&string,'a');pos=findfirstchar(&string,'d');addchar(&string,'a',pos);/*if(ok==0){printf("No\n");}else{printf("Yes\n");}printf("%d\n",mystrlen(string.p));printf("%d\n",string.nLength);backaddstring(&string,"pad");flag=deletefirststring(&string,"pad");printf("%d\n",mystrlen(string.p));printf("%d\n",string.nLength);if(flag==0){printf("No\n");}else{printf("Yes\n");}/*printf("%d\n",mystrlen(string.p));//字符串长度findch=findfirstchar(&string,'o');//查找字符if(findch==NULL){printf("No\n");}else{printf("%c\n",*findch);printf("Yes\n");}findstr=findfirststr(&string,"tep");//查找字符串if(findstr==NULL){printf("No\n");}else{printf("%s\n",findstr);printf("Yes\n");}*/printfstring(&string);run(&string);
}

字符串定义操作(C语言)相关推荐

  1. C语言之字符串探究(三):字符串库函数操作——strlen、strcat、strcpy、strcmp

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  2. C语言之字符串探究(二):字符串原生操作——strlen、strcat、strcpy、strcmp自实现

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  3. C语言中lwr是谁的缩写,C语言中关于字符串的操作(转)

    浅析C语言中关于字符串的操作(转) 前言:如果您是学C/C 的,对于字符串的操作不是很了解,请您耐心读完.作为我的朋友,我很乐意和您分享我最近的知识积累.毕 竟,网上很少有这么全,这么细的介绍,更少有 ...

  4. C++字符串定义与操作

    本篇介绍字符串的定义和常见操作:复制.连接.长度.大小.首字母定位等. /* * Author:W: * 字符串定义与操作 * 1.C语言风格的字符串 * 2.C++语言风格的字符串 *///引入头文 ...

  5. 数据库1:数据库、DDL数据库定义语言、DML操作数据库语言、DQL条件查询语句

    数据库 SQL(Structure Query Language)语言是数据库的核心语言. SQL语言共分为四大类:数据查询语言DQL,数据操做语言DML,数据定义语言DDL,数据控制语言DCL. 1 ...

  6. 【python】字符串的操作与方法、元组的定义与操作

    1. 字符串的操作与方法 1.1 字符串取值 根据索引取值(下标)语法格式:字符串名[索引值]使用场景:取单个字符时使用 # 案例:分别获取字符串runoob的第一个字符和最后一个字符 # 正序最大的 ...

  7. C语言中字符串定义与文字常量区

    C语言中字符串定义与文字常量区 C语言的内存组织方式1>代码区,存放可执行代码2>全局存储区,存放所有全局变量和静态变量3>文字常量区,常量字符串4>堆区,malloc,new ...

  8. c语言字符初始化怎么表示,C语言初始化字符串 怎么进行字符串赋值?C语言

    C语言数组字符串初始化问题 C语言中,初始化操作就是在定义变量的时候,对变量进行赋值,即称为变量的初始化.对于字符变量也是一样的. 举例如下: char ch='a'; // 定义一个字符变量,变量名 ...

  9. Python基础day03【字符串(定义、输入输出、常用方法)、列表(定义、基本使用、增删改查、嵌套)、元组】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day3 作业解析[5道 字符串题.3道 列表题.2道 元组题]      学习目 ...

最新文章

  1. 使用程序解决一道逻辑推理题
  2. 关于幂等性的解决方案
  3. python安装用32位还是64位-我应该使用Python 32位还是Python 64位
  4. 如何发表高水平论文(转载)
  5. Tomcat启动Name or service not known错误解决
  6. 基于Wide Deep Learning的推荐系统
  7. 87-区间线段树(板子)--那个苑区的人最瘦
  8. 自定义 URL Scheme 完全指南
  9. Java的并发编程中的多线程问题到底是怎么回事儿?
  10. 【Flink】Flink 1.12.2 SlotManager
  11. 试试Write Live Writer在博客园的使用
  12. opencv识别圆的代码(转)
  13. Web系统集成OCS在线状态功能
  14. 操作系统课设 Nachos 实验一:Nachos 系统的安装与调试
  15. 采样示波器和实时示波器的原理及优势
  16. mina框架详解-小白收藏
  17. dell无法启动计算机,戴尔电脑装系统蓝屏无法启动怎么办
  18. 均匀分布的期望和方差的推导_均匀分布的数学期望与方差 常见分布的数学期望和方差...
  19. android-Message.obtain和handler.obtainMessage
  20. Python Gstreamer播放rtsp视频流(海康IPCAM)

热门文章

  1. Ponemon:优化SIEM时所面临的挑战
  2. C#.NET高级面试题
  3. Linux下搭建AP
  4. NSTimer里的userInfo
  5. ocs 2007 r2 服务体验
  6. java把含小数点的数字字符串转换为int类型
  7. linux命令快速手记 — 让手指跟上思考的速度(四)
  8. 为什么要用dubbo,dubbo是什么,为什么要和zk结合使用?
  9. 次数匹配(不需要在前面加“\”)
  10. 5个让你的404页面变的更加实用的技巧