在下面的再加7个函数,在数据结构上用C语言做
#include<stdio.h>
#include<string.h>
char *Strcpy(char *s1,char *s2)
{
while(*s2!='\0')
*s1++=*s2++;
*s1=*s2;
return s1;
}
char *Strcat(char *s1,char *s2)
{
char s[1000];
int i=0;
int len=strlen(s1);
while(*s1!='\0')
s[i++]=*s1++;
while(*s2!='\0')
s[len++]=*s2++;
s[len]=*s2;
return s;
}
int Strcmp(char *s1,char *s2)
{
if(strlen(s1)!=strlen(s2))
{
while(*s1==*s2)
{
s1++;
s2++;
}
return (*s1<*s2)==1?1:-1;
}
else
{
while(*s1!='\0'&&*s1==*s2)
{
s1++;
s2++;
}
if(*s1=='\0')
return 0;
else return (*s1<*s2)==1?1:-1;
}
}
void main()
{
char s1[20],s2[20]="hello!",s3[20]="bye!";
Strcpy(s1,s2);
printf("%d\n",Strcmp(s2,s3));
printf("%d\n",Strcmp(s3,s2));
printf("%d\n",Strcmp(s2,s1));
printf("%s\n",s1);
printf("%s\n",Strcat(s1,s2));
}
在上面的3个函数上加下面的7个
strequal:判串相等
strlength:求串长
substr:求子串
insstr:插入
delstr:删除
repstr:替换
dispstr:串输出
用定长存储方式实现字符串的基本操作(10个函数)
答案:5 悬赏:80
解决时间 2021-03-12 04:42
- 提问者网友:余味
- 2021-03-11 22:20
最佳答案
- 二级知识专家网友:木子香沫兮
- 2021-03-11 23:58
#include <assert.h>
#include <stdio.h>
//计算字符串str的长度一
int strlen(const char* str)
{
int i = 0;
while(*(str+i) != '\0')
{
i++;
}
return i;
}
//将字符串src copy 到 des中 二
char* strcpy(char* des, const char* src)
{
assert((des!=NULL)&&(src!=NULL));//确认des和src均不是空指针
char* desAddress = des;
//copy
while ((*des++ = *src++) != '\0')
{
NULL;
}
return desAddress;
}
//将src连接到des后面 三
char* concat(char* des, const char* src)
{
char* desAddress = des;
//des指针移动到最后
while (*des++ != '\0')
{
NULL;
}
//指针后退一位,指向'\0'的位置
des--;
//concat
while ((*des++ = *src++) != '\0')
{
NULL;
}
return desAddress;
}
//截取src的第s到e个字符,将得到的子串返回 四
char* SubStr(char* des, const char* src, int s, int e)
{
assert((des != NULL) && (src != NULL));
char* desAddress = des;
//如果e的值超出字符串的长度,则截取从s到字符串最后的字符
int maxlength = (int)strlen(src);
if (e > maxlength)
{
e = maxlength;
}
//得到从e开始到s的长度为e-s的字符串
int tk = 0;
while (tk <= e-s)
{
*(des+tk) = *(src+tk+s);
tk++;
}
//结束字符串
*(des+tk) = '\0';
return desAddress;
}
//将src插入到des的第p个字符之后 五
char* InsStr(char* des, const char* src, int p)
{
assert((src != NULL) && (des != NULL) && (p >= 0));
char* desAddress = des;
//如果位置p超出字符串的最大长度,则直接将src连接到des后面
if (p >= (int)strlen(des))
{
concat(des,src);
return desAddress;
}
int srcLength = (int)strlen(src);
//存储第p个字符后面的字符串,存储在tempps中
char* tempps = new char[strlen(des)-p+1];
strcpy(tempps,des+p);
//指针pps指向第p+1个字符
char* pps = des+p;
//将src copy到第p个字符后面
while ((*pps++ = *src++) != '\0')
{
NULL;
}
//指针前移一位,指向字符串结束符'\0'
pps--;
//循环,将tempps copy 到pps后面,此时pps指向des+p+srcLength-1
while ((*pps++ = *tempps++) != '\0')
{
NULL;
}
//pps--;
//strcat(pps,tempps);
return desAddress;
}
//交换两个字符
void swap(char& sc, char& dc)
{
char temp = sc;
sc = dc;
dc = temp;
}
//交换字符串str中的第i,j个字符,以字符串数组返回 六
char* repstr(const char* str, const int i, const int j)
{
assert(str != NULL);
char* dstr = new char[strlen(str)+1];
strcpy(dstr,str);
swap(*(dstr+i),*(dstr+j));
return dstr;
}
//倒置字符串,例如将"abcdef"变为"fedcba" 七
char* strrev(char* str)
{
assert(str != NULL);
int len = (int)strlen(str);
char* p = str;
char* data = new char[len+1];
//char* q = data;
//while (*p++ != '\0')
//{
// NULL;
//}
//p--;
//while((*data++ = *p--) != NULL)
//{
// NULL;
//}
/
if ((*(str+i) != ' ') && (i != 0)) continue;
else
{//找到空格
s = i + 1;
if (i == 0)//如果处理到第一个字符
{
s = i;
}
//将获得的单词(源串中从第s到第e个字符)
for (int j = s; j < e; j++)
{
*(data+k++) = *(str+j);
}
*(data+k++) = ' ';//补齐空格
e = i;
}
}
*(data+k) = '\0';
return data;
}
//从一个字符串中删除另一个字符串中出现的字符 九
char* delstr(char* str, const char* src)
{
assert((str != NULL) && (src != NULL));
int len = (int)strlen(str);
char* data = new char[len+1];
char* p = data;
//对原数据进行一个copy,防止源数据为只读
while ((*data++ = *str++) != '\0')
{
NULL;
}
char* res = p;
int srclen = (int)strlen(src);
while (*res != '\0')//对源串进行循环
{
for (int i = 0; i < srclen; i++)//依次与src中的每个字符进行比较
{
if (*res == *(src+i))//如果当前字符与src中的某个字符相等
{
int i = 0;
while (*(res+i) != '\0')//将当前字符后面的所有字符前移一位
{
*(res+i) = *(res+i+1);
i++;
}
}
}
res++;
}
return p;
}
//判读一个字符是否在一个字符串中,如果在,返回字符在字符串中首次出现的下标,否则返回-1 十
int IsExistInString(const char* str,char c)
{
assert(str != NULL);
int i = 0;
while (*(str+i) != '\0')
{
if (*(str+i) == c)
{
return i;
}
i++;
}
return -1;
}
int main()
{
char* ch = new char[50];
ch[0]='h';
ch[1]='a';
ch[2]='p';
ch[3]='p';
ch[4]='y';
ch[5]='\0';
char*dch = new char[50];
dch[0] = 'm';
dch[1] = 'n';
dch[2] = '3';
dch[3] = '\0';
char*cat=strrev(dch);
char* catc =InsStr(dch,ch,1);
printf("%s\n",cat);
printf("%s\n",catc);
char*cch = new char[50];
strcpy(cch,ch);
printf("%s\n",cch);
char* tc = strrev(ch);
printf("%s\n",tc);
int i = IsExistInString(ch,'a');
printf("%d\n",i);
char*tch=new char[50];
tch[0]='h';
tch[1]='a';
tch[2]='p';
tch[3]='p';
tch[4]='y';
tch[5]=' ';
tch[6]='n';
tch[7]='e';
tch[8]='w';
tch[9]=' ';
tch[10]='y';
tch[11]='e';
tch[12]='a';
tch[13]='r';
tch[14]='\0';
char*dc=repstr(tch,1,3);
printf("%s\n",dc);
char*oc=wordrev(tch);
printf("%s\n",oc);
char*ac=delstr(tch,ch);
printf("%s\n",ac);
}
#include <stdio.h>
//计算字符串str的长度一
int strlen(const char* str)
{
int i = 0;
while(*(str+i) != '\0')
{
i++;
}
return i;
}
//将字符串src copy 到 des中 二
char* strcpy(char* des, const char* src)
{
assert((des!=NULL)&&(src!=NULL));//确认des和src均不是空指针
char* desAddress = des;
//copy
while ((*des++ = *src++) != '\0')
{
NULL;
}
return desAddress;
}
//将src连接到des后面 三
char* concat(char* des, const char* src)
{
char* desAddress = des;
//des指针移动到最后
while (*des++ != '\0')
{
NULL;
}
//指针后退一位,指向'\0'的位置
des--;
//concat
while ((*des++ = *src++) != '\0')
{
NULL;
}
return desAddress;
}
//截取src的第s到e个字符,将得到的子串返回 四
char* SubStr(char* des, const char* src, int s, int e)
{
assert((des != NULL) && (src != NULL));
char* desAddress = des;
//如果e的值超出字符串的长度,则截取从s到字符串最后的字符
int maxlength = (int)strlen(src);
if (e > maxlength)
{
e = maxlength;
}
//得到从e开始到s的长度为e-s的字符串
int tk = 0;
while (tk <= e-s)
{
*(des+tk) = *(src+tk+s);
tk++;
}
//结束字符串
*(des+tk) = '\0';
return desAddress;
}
//将src插入到des的第p个字符之后 五
char* InsStr(char* des, const char* src, int p)
{
assert((src != NULL) && (des != NULL) && (p >= 0));
char* desAddress = des;
//如果位置p超出字符串的最大长度,则直接将src连接到des后面
if (p >= (int)strlen(des))
{
concat(des,src);
return desAddress;
}
int srcLength = (int)strlen(src);
//存储第p个字符后面的字符串,存储在tempps中
char* tempps = new char[strlen(des)-p+1];
strcpy(tempps,des+p);
//指针pps指向第p+1个字符
char* pps = des+p;
//将src copy到第p个字符后面
while ((*pps++ = *src++) != '\0')
{
NULL;
}
//指针前移一位,指向字符串结束符'\0'
pps--;
//循环,将tempps copy 到pps后面,此时pps指向des+p+srcLength-1
while ((*pps++ = *tempps++) != '\0')
{
NULL;
}
//pps--;
//strcat(pps,tempps);
return desAddress;
}
//交换两个字符
void swap(char& sc, char& dc)
{
char temp = sc;
sc = dc;
dc = temp;
}
//交换字符串str中的第i,j个字符,以字符串数组返回 六
char* repstr(const char* str, const int i, const int j)
{
assert(str != NULL);
char* dstr = new char[strlen(str)+1];
strcpy(dstr,str);
swap(*(dstr+i),*(dstr+j));
return dstr;
}
//倒置字符串,例如将"abcdef"变为"fedcba" 七
char* strrev(char* str)
{
assert(str != NULL);
int len = (int)strlen(str);
char* p = str;
char* data = new char[len+1];
//char* q = data;
//while (*p++ != '\0')
//{
// NULL;
//}
//p--;
//while((*data++ = *p--) != NULL)
//{
// NULL;
//}
/
if ((*(str+i) != ' ') && (i != 0)) continue;
else
{//找到空格
s = i + 1;
if (i == 0)//如果处理到第一个字符
{
s = i;
}
//将获得的单词(源串中从第s到第e个字符)
for (int j = s; j < e; j++)
{
*(data+k++) = *(str+j);
}
*(data+k++) = ' ';//补齐空格
e = i;
}
}
*(data+k) = '\0';
return data;
}
//从一个字符串中删除另一个字符串中出现的字符 九
char* delstr(char* str, const char* src)
{
assert((str != NULL) && (src != NULL));
int len = (int)strlen(str);
char* data = new char[len+1];
char* p = data;
//对原数据进行一个copy,防止源数据为只读
while ((*data++ = *str++) != '\0')
{
NULL;
}
char* res = p;
int srclen = (int)strlen(src);
while (*res != '\0')//对源串进行循环
{
for (int i = 0; i < srclen; i++)//依次与src中的每个字符进行比较
{
if (*res == *(src+i))//如果当前字符与src中的某个字符相等
{
int i = 0;
while (*(res+i) != '\0')//将当前字符后面的所有字符前移一位
{
*(res+i) = *(res+i+1);
i++;
}
}
}
res++;
}
return p;
}
//判读一个字符是否在一个字符串中,如果在,返回字符在字符串中首次出现的下标,否则返回-1 十
int IsExistInString(const char* str,char c)
{
assert(str != NULL);
int i = 0;
while (*(str+i) != '\0')
{
if (*(str+i) == c)
{
return i;
}
i++;
}
return -1;
}
int main()
{
char* ch = new char[50];
ch[0]='h';
ch[1]='a';
ch[2]='p';
ch[3]='p';
ch[4]='y';
ch[5]='\0';
char*dch = new char[50];
dch[0] = 'm';
dch[1] = 'n';
dch[2] = '3';
dch[3] = '\0';
char*cat=strrev(dch);
char* catc =InsStr(dch,ch,1);
printf("%s\n",cat);
printf("%s\n",catc);
char*cch = new char[50];
strcpy(cch,ch);
printf("%s\n",cch);
char* tc = strrev(ch);
printf("%s\n",tc);
int i = IsExistInString(ch,'a');
printf("%d\n",i);
char*tch=new char[50];
tch[0]='h';
tch[1]='a';
tch[2]='p';
tch[3]='p';
tch[4]='y';
tch[5]=' ';
tch[6]='n';
tch[7]='e';
tch[8]='w';
tch[9]=' ';
tch[10]='y';
tch[11]='e';
tch[12]='a';
tch[13]='r';
tch[14]='\0';
char*dc=repstr(tch,1,3);
printf("%s\n",dc);
char*oc=wordrev(tch);
printf("%s\n",oc);
char*ac=delstr(tch,ch);
printf("%s\n",ac);
}
全部回答
- 1楼网友:萌萌哒小可爱
- 2021-03-12 05:45
都不难,自己写吧。
不会了再来问,别自己一点都不考虑就依赖别人的帮忙!
- 2楼网友:青春如此荒謬
- 2021-03-12 04:29
# include
#define ok 1
#define error 0
#define overflow -1
//-----串的堆分配储存表示-----
typedef struct{
char *ch; //若是非空串,则按串长分配储存区,否则ch为null
int length; //串长度
}hstring;
//- - - - - 基本操作的算法描述 - - - - -
//1.生成一个其值等于串常量chars的串t
int strassign(hstring &t, char* chars){
int len = strlen(chars); //求串chars的长度len
if(t.ch) free(t.ch); //若t存在则释放t原有的空间
if(!len){
t.ch = null;
t.length = 0;
}
else{
if(!(t.ch = (char *)malloc((len+1)* sizeof(char))))
exit(0);
strcpy(t.ch,chars); //调用系统原有函数复制字符串,给t赋值
t.length = len;
}
return 0;
}
//2.比较字符串
//若s>t,则返回值>0,若s=t,则返回值=0,若s
- 3楼网友:你好陌生人
- 2021-03-12 02:49
#include<stdio.h>
#include<string.h>
char *Strcpy(char *s1,char *s2)
{
while(*s2!='\0')
*s1++=*s2++;
*s1=*s2;
return s1;
}
char *Strcat(char *s1,char *s2)
{
char s[1000];
int i=0;
int len=strlen(s1);
while(*s1!='\0')
s[i++]=*s1++;
while(*s2!='\0')
s[len++]=*s2++;
s[len]=*s2;
return s;
}
int Strcmp(char *s1,char *s2)
{
if(strlen(s1)!=strlen(s2))
{
while(*s1==*s2)
{
s1++;
s2++;
}
return (*s1<*s2)==1?1:-1;
}
else
{
while(*s1!='\0'&&*s1==*s2)
{
s1++;
s2++;
}
if(*s1=='\0')
return 0;
else return (*s1<*s2)==1?1:-1;
}
}
void main()
{
char s1[20],s2[20]="hello!",s3[20]="bye!";
Strcpy(s1,s2);
printf("%d\n",Strcmp(s2,s3));
printf("%d\n",Strcmp(s3,s2));
printf("%d\n",Strcmp(s2,s1));
printf("%s\n",s1);
printf("%s\n",Strcat(s1,s2));
}
- 4楼网友:萌萌哒小可爱
- 2021-03-12 01:25
qmzxldksf(jdk2-hnb)
djsk109(ghnx1+k12xz.)
jvksdl102-fm,dkx.1
hxnbhsjcbmczmbncznx
djskl1028jfx
idlgi;skfs;9(l2sx,sl@=dkcn)
gfidlfkvs./,m lerf411
jf,.cx,dsl.riefks(&jNsaj101fgdS)
dsjkl.f 02ds9djsc(,jdszk^)
fnxsdmf,sjnvglfk,.423$
fudjsk,.kl.ksld;.
krg;'sdfk1035461
dfiuzl102,5-|.dsklc
jfds.kfl.zkda/;s105463
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |