您的位置:首页 > 其它

字符串常见操作,你想要的这里都有

2019-03-07 16:03 399 查看

整理了一下近一年以来学习的有关字符串操作的函数,一方面是为了督促自己养成勤于整理碎片知识的习惯,一方面是通过再一次的敲击与思考加深自己对这些代码的思考。

[code]#include<stdio.h>
#include<string.h>

#define N 80

//求串长
int myStrLen(char *str)
{
int i;//既是扫描下标,又是计数器

for(i=0;*(str+i)!='\0';i++)
;//空操作
return i;
}
//串比较
int myStrCmp(char *s,char *t)
{
while(*s && *t && *s==*t)
{
s++;
t++;
}
//跳出while条件有二:1.*s或*t至少有一为空【到达'\0'】、2.*s!=*t
//通过第一个条件运算符判断条件1
//通过第2个条件运算符判断条件2
return (*s==*t)?0:(*s>*t?1:-1);
}
//串逆序输出
void myStrReverse()
{
char str
;
int i;
printf("input a string:\n");
gets(str);
printf("after reverse:\n");
//下标i指向字符串末尾,从后往前打印
for(i=strlen(str)-1;i>=0;i--)
printf("%c",str[i]);
printf("\n");
}
//删除串中指定字符
void myStrDel()
{
//申请一个临时字符数组strtemp,用于存储非指定字符
char str
,strtemp
;
int i,j;
printf("enter a string :");
gets(str);

for(i=0,j=0;i<strlen(str);i++)
if(str[i]!='c')
strtemp[j++]=str[i];
strtemp[j]='\0';//由于是字符串,末尾记得补'\0'

strcpy(str,strtemp);
printf("after  delete,str=%s",str);
}
//字符串复制
void myStrCopy()
{
char s1
,s2
="ascdefg\0hijk";
int i=0;
while(1)
{
//先赋值,再判断是否为结束标志。
s1[i]=s2[i];
if(s2[i]=='\0')
break;

i++;
}
printf("after string copy :%s\n",s2);
}
//串连接
void myStrCat()
{
char dstStr[20]="12345",srcStr[20]="6789";
int i,j;

printf("before strcat:\n");
printf("dststr=%s,srcstr=%s\n",dstStr,srcStr);
printf("\n");

for(i=0;dstStr[i]!='\0';i++)
;//空操作,找到dstStr中'\0'的位置

//将srcStr的字符逐一置于dstStr后面
for(j=0;srcStr[j]!='\0';j++)
dstStr[i+j]=srcStr[j];

dstStr[i+j]='\0';//新串末尾加'\0'

printf("after strcat:\n");
printf("dstStr=%s\n",dstStr);
}
//串连接
void myStrCat1(char dstStr[],char srcStr[])//亦可将形参换为指针变量
{
int i,j=0;
while(dstStr[i]!='\0')//计算串长
i++;
while(srcStr[j]!='\0')
{
dstStr[i]=srcStr[j];
i++;
j++;

}
dstStr[i]='\0';
}
//模式串匹配 【简单模式匹配】
int myStrLoc(char str1[],char str2[])
{
unsigned int i,len1,len2;
//分别计算主串和模式串的长度
len1=strlen(str1);
len2=strlen(str2);
//当主串的长度小于模式串时,铁定无法匹配成功
if(len1>len2)
return -1;
//循环判断语句:之所以要i<=strlen(str2)-strlen(str1)
//是因为当i超出这个范围时,主串的剩余长度小于模式串,此时肯定不匹配
for(i=0;i<=strlen(str2)-strlen(str1);i++)
if(strncmp(str1,str2+i,len1)==0)
return i;
return -1;
}
//截取子串
char *mySubStr(char *s,int start,int len)
{
static char sstr[20];
int i;
if(start<0||start>=strlen(s)||len<0)
return NULL;
//注意:当从起始位置开始不足len个字符或中途遇到\0时的情况
for(i=0;i<len&&s[start]!='\0';i++)
sstr[i]=s[start+i];
sstr[i]='\0';
return sstr;
}
//字符串循环左移n位【右移同理】
void myStrShiftL(char *s,int n)
{
int i,len;
char ch;

len=strlen(s);
//左移几位就循环几次,一次移一位
for(i=0;i<n;i++)
{
ch=s[0];
strncpy(s,s+1,len-1);
s[len-1]=ch;
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: