1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,
返回子串个数。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.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 *t,*temp;
p = str;
q = sub_str;
t = result;
int n,count = 0;
n = strlen(q);
tmep = (char *)malloc(n+1);
memset(temp,0x00,n+1);
while(*p)
{
memcpy(temp,p,n);
if(strcmp(temp,q) == 0 )
{
count++;
memset(temp;0x00,n+1);
p = p + n;
}
else
{
*t = *p;
p++;
t++;
memset(temp,0x00,n+1);
}
}
free(temp);
return count;
}
int main()
{
char s[100] = {‘\0’};
int num =
delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);
printf(“The number of sub_str is %d\n”,num);
printf(“The result string is %s\n”,s);
}
2、约瑟夫环是一个数学的应用问题:已知 n 个人(以编号 1,2,
3...n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,
数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那
个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int num;
struct Node *next;
}LinkList;
LinkList *creat(int n)
{
LinkList *p,*q,*head;
int i=1;
p=(LinkList *)malloc(sizeof(LinkList));
p->num=i;
head=p;
for(i=2;i<=n;i++)
{
q=(LinkList *)malloc(sizeof(LinkList));
q->num=i;
p->next=q;
p=q;
}
p->next=head; /*使链表尾指向链表头 形成循环
链表*/
return head;
}
void fun(LinkList *L,int m)
{
int i;
LinkList *p,*s,*q;
p=L;
printf("出列顺序为:");
while(p->next!=p)
{
for(i=1;i<m;i++)
{ q=p;
p=p->next;
}
printf("%5d",p->num);
s=p;
q->next=p->next;
p=p->next;
free(s);
}
printf("%5d",p->num);
}
int main()
{
LinkList *L;
int n, m;
n=9;
m=5;
L=creat(n);
fun(L,m);
return 0;
}
3、比较一个数组的元素 是否为回文数组
#include <stdio.h>
#include <string.h>
int huiwen(char str[])
{
int i,len,k=1;
len=strlen(str);
for(i=0;i<len/2;i++)
{
if(str[i]!=str[len-i-1])
{
k=1;
break;
}
}
if(k==0)
printf("%s 不是一个回文数",str);
else
printf("%s 是一个回文数",str);
}
void main()
{
char str[100] = {0};
int i;
int len;