姓名 周成麒
日期 9.4
今日学习任务
学习c语言堆栈,进出栈
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量)
今日开发遇到的问题
对栈的理解不够到位,跟不上老师节奏
今日开发收获
明白了栈的一些基础含义
自我评价
上课不够积极,老师的节奏我跟不上
今日作业
一、输入一个字符串,计算字符串中子串出现的次数
#include <stdio.h>
#include <string.h>
int main()
{
char a[100];
printf("Please input your string.\n");
scanf("%s",a);
char * c = a;
char b[10];
printf("Please input the subsidiary string. \n");
scanf("%s",b);
char * d = b;
int n;
int num = 0;
n = strlen(d);
while(strlen(c) > 0)
{
if(strncmp(c,d,n) == 0)
{
num++;
c += n;
}
else
{
c++;
}
}
printf("%d\n",num);
return 0;
}
二、编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,即将句子中的单词位置倒置,而不改变单词内部结构
#include <stdio.h>
#include <string.h>
int main()
{
char str[]="I am from shanghai";
printf("%s\n",str);
//puts (str);
char tmp;
char *p1 = str;
char *p2 = str + strlen(str) -1;
while (p1<p2)
{
tmp = *p1;
*(p1++) = *p2;
*(p2--) = tmp;
}
char *p3 = NULL;
p1 = str;
p2 = str;
while (*p2)
{
if (*p2 == ' ')
{
p3 = p2 - 1;
while (p1<p3)
{
tmp = *p1;
*(p1++) = *p3;
*(p3--) = tmp;
}
p1 = p2 + 1;
}
p2++;
}
p3 = p2 - 1;
while (p1<p3)
{
tmp = *p1;
*(p1++) = *p3;
*(p3--) = tmp;
}
//puts (str);
printf("%s",str);
return 0;
}
三、输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来(提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧)
#include <stdio.h>
#include <string.h>
int main()
{
char s[100];
char str1[100];
char str2[100];
printf("Please input the whole string.\n");
gets(s);
printf("Please input the head string.\n");
gets(str1);
printf("Please input the tail string.\n");
gets(str2);
char *p = s;
char *p1 = str1;
char *p2 = str2;
char *p3 = NULL;
char *p4 = NULL;
printf("The legal frame in the string is :\n");
while(*p)
{
if(strncmp(p,p1,strlen(str1))==0)
{
p3=p;
while(*p3)
{
if(strncmp(p3,p2,strlen(str2))==0)
{
int j=p3-p+strlen(str2),i;
p4 = p;
for(i=0;i<j;i++)
{
printf("%c",*p4++);
}
puts("\0");
}
*p3++;
}
}
*p++;
}
return 0;
}