1.在字符串中A中查找字符串B,删除该字符串A中的B,并且返回B的个数.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int delete_sub_str(const char *str,const char *sub_str,char *result)
{
assert(str!=NULL&&sub_str!=NULL); /* 入口处判断输入参数是否合法 */
const char *p,*q;
char *temp;
p=str;q=sub_str;
int n,count=0; /* count用来记录字串数 */
n=strlen(q);
temp=(char *)malloc(n+1);
memset(temp,0x00,n+1);
while(*p) /* 遍历原始字符串 */
{
memcpy(temp,p,n); //从p所指向的位置开始拷贝长度为字串长度的字符串到temp中
if(strcmp(temp,q)==0)
{ // 如果temp与字串相等,字串数+1, p向后移动n个位置
count++;
memset(temp,0x00,n+1);
p+=n;
}
else
{ // 如果temp不与字串相等, 则把p指向的当前拷贝到t中,并使p和t都指向下一位置
*result =*p ;
result++;
p++;
memset(temp,0x00,n+1);
}
}
free(temp);
return count;
}
int main()
{
char *str="i like to likelike yolikeu";
char *sub_str="like";
char result[30]={0};
int count=delete_sub_str(str,sub_str,result);
printf("%s\n",result);
printf("%d\n",count);
return 0;
}
2.高精度乘法,两个是0-64位的数,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;
int i,j;
scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));
j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}
for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}
求相乘结果。