浙江大学翁恺《C语言程序设计进阶》第1周编程题

字符串比对(10分)

题目内容:

题目说起来很简单,你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,则输出-1。

注意,第一个字符的位置是0。
注意,第一个字符串在第二个字符串中的位置可能不止一处。
注意,字符串中可能含有空格。
注意,两个字符串的长度一定大于0。

输入格式:

两个字符串,一行一个。

输出格式:

第一个字符串在第二个字符串中出现的位置,按照从小到到的顺序排列,每个数字后面有一个空格。
如果在第二个字符串中找不到第一个字符串,则输出-1。

输入样例:

abba
ababbba abbabbabbabbaacc

输出样例:

8 11 14 17

时间限制:500ms内存限制:32000kb

#include <stdio.h>
#include <stdlib.h>

int main() {
        int i=0;
        char *a= (char *)malloc(sizeof(char)*(10000+1));
        char *b= (char *)malloc(sizeof(char)*(10000+1));
        int c[10000]={0};
        char *ap = a;
        char *bp = b;
        int *cp = c;
        gets(a);
        gets(b);
        // 遍历长字符串
        while(*bp != '\0') {
                i++;
                ap = a;
                char *bp2 = bp;
                // 遍历短字符串
                while(*ap != '\0') {
                		// 字符不相等跳出循环
                        if(*ap != *bp2) {
                                break;
                        }
                        ap++;
                        bp2++;
                }
                // 如果短字符串遍历完代表匹配上了
                if(*ap == '\0') {
                        *cp = i;
                        cp++;
                }
                bp++;
        }
        // 判断一个都没有匹配上
        if(cp == c) {
                printf("-1");
        }else {
                for(i=0;i<sizeof(c)/sizeof(c[0]);i++) {
                        if(c[i]==0) {
                                break;
                        }
                        printf("%d ",c[i]-1);
                }
        }
        free(a);
        free(b);
        return 0;
}

在这里插入图片描述

注意点

这题目读字符串不能用scanf,因为scanf遇到空格会停止输入,gets则不会,这是我调试半天才发现的,基础还是太差了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
浙江大学翁恺C语言课件是浙江大学计算机学院教授翁恺编写的一套C语言课程教材。这套课件主要用于C语言的教学与学习,内容包括基本语法、数据类型、运算符、流程控制、函数、指针、数组、字符串等C语言的基础知识。 这套课件具有以下几个特点。首先,它简单易懂,适合初学者学习。翁恺老师针对C语言的特点和学习难点,将知识点进行了简洁明了的讲解,同时结合了大量的示例和练习,帮助学生更好地理解和掌握C语言的编程思路和技巧。 其次,课件内容丰富全面。翁恺老师在编写课件时,充分考虑到C语言的广泛应用领域和学生的学习需求,涵盖了C语言的各个方面,包括基础语法、程序设计、算法、数据结构等内容,帮助学生建立正确的编程思维和解决实际问题的能力。 再次,课件设计灵活多样。为了培养学生的动手实践能力,课件中设计了丰富的编程实例和实践项目,学生可以边学边练,不断巩固和提高自己的编程能力。此外,课件中还包含了一些扩展知识,如文件操作、动态内存管理等,有助于学生进一步拓宽视野。 总之,浙江大学翁恺C语言课件是一套权威且实用的C语言学习资料,通过学习这套课件,学生可以系统地学习和掌握C语言的基础知识,提高编程能力,并为日后的学习和工作打下坚实的基础。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值