1. 指针与字符串----字符串对比
题目内容
题目内容:
题目说起来很简单,你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,则输出-1。
注意,第一个字符的位置是0。
注意,第一个字符串在第二个字符串中的位置可能不止一处。
注意,字符串中可能含有空格。
注意,两个字符串的长度一定大于0。
输入格式:
两个字符串,一行一个。
输出格式:
第一个字符串在第二个字符串中出现的位置,按照从小到到的顺序排列,每个数字后面有一个空格。
如果在第二个字符串中找不到第一个字符串,则输出-1。
输入样例:
abba
ababbba abbabbabbabbaacc
输出样例:
8 11 14 17
时间限制:500ms内存限制:32000kb
代码详情
#include <stdio.h>
#include <string.h>
int main(){
char ft[1000];//声明第一个较短的字符串
gets(ft); //读取第一个字符串
char sd[1000];
gets(sd);//读取第二个较长的字符串
int flag=1;
if(strstr(sd,ft)==NULL){//如果在第二个较长的字符串sd中找不到第一个较短的字符串ft,则输出-1
flag=0;
printf("-1");
}
char *p=sd;//定义指针p指向第二个字符串的首地址
while(flag){//只要可以找到满足条件
p=strstr(p,ft);//srstr()返回包含第二个字符串的第一个字符串的首地址
if(p==NULL){
flag = 0;
}else{
printf("%d ", p - sd);
}
p++;
}
return 0;
}
2. 链表----逆序输出数字
题目内容
题目内容:
你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。
输入格式:
一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。
输出格式:
按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。
输入样例:
1 2 3 4 -1
输出样例:
4 3 2 1
时间限制:500ms内存限制:32000kb
代码详情
#include <stdio.h>
#include <stdlib.h>
typedef struct _node { //定义一个类型为struct _node的节点结构,节点中有值还有指向前一个节点的指针
int value;
struct _node *before;
} Node; //将 struct _node类型缩写为Node
int main(){
Node *head = NULL; //链表头结点初始化为空
int number;
scanf("%d", &number);
while(number != -1){
Node *p = (Node*)malloc(sizeof(Node));//每次为一个节点开辟一个内存空间
p->value = number;
p->before = head; //p->before为头结点,将新结点p连接到链表(即p的指针指向头结点)
head = p; //再将头结点更新为p结点
scanf("%d", &number);
}
//遍历方法1:for循环
//Node *q;
//for ( q = head; q; q=q->before) {
//printf("%d ", q->value);
//}
//free(q);
//遍历方法2:while循环
while(head){
printf("%d ", head->value);
head = head->before;
}
free(head);
return 0;
}