第1周編程題
返回
依照學術誠信條款,我保證此作業是本人獨立完成的。
溫馨提示:
1.本次作業屬於Online Judge題目,提交后由系統即時判分。
2.學生可以在作業截止時間之前不限次數提交答案,系統將取其中的最高分作為最終成績。
1
字符串比對(10分)
題目內容:
題目說起來很簡單,你會讀到兩個字符串,每個字符串占據一行,每個字符串的長度均小於10000字符,而且第一個字符串的長度小於第二個字符串的。你的程序要找出第一個字符串在第二個字符串中出現的位置,輸出這些位置,如果找不到,則輸出-1。
注意,第一個字符的位置是0。
注意,第一個字符串在第二個字符串中的位置可能不止一處。
注意,字符串中可能含有空格。
注意,兩個字符串的長度一定大於0。
輸入格式:
兩個字符串,一行一個。
輸出格式:
第一個字符串在第二個字符串中出現的位置,按照從小到到的順序排列,每個數字后面有一個空格。
如果在第二個字符串中找不到第一個字符串,則輸出-1。
輸入樣例:
abba
ababbba abbabbabbabbaacc
輸出樣例:
8 11 14 17
時間限制:500ms內存限制:32000kb
1 // 2 // main.c 3 // CC 4 // 5 // Created by anzhongyin on 2016/12/10. 6 // Copyright © 2016年 anzhongyin. All rights reserved. 7 // 8 9 #include <stdio.h> 10 #include <stdlib.h> 11 #include <string.h> 12 int main(int argc, const char * argv[]) { 13 // insert code here... 14 char c; 15 int i=0; 16 char str[1000]={'\0'}; //大字符串 17 char dest[100]={'\0'}; //子字符串 18 char *q=0; 19 char *p=0; 20 int b=1; //BOOL,b=0,第二個字符串中找到第一個字符串,否則為1 21 while((c=getchar())!='\n') //讀入子字符串 22 { 23 dest[i]=c; 24 i++; 25 26 27 } 28 i=0; 29 while((c=getchar())!='\n')//讀入長字符串 30 { 31 str[i]=c; 32 i++; 33 34 35 } 36 37 p=str; //將&str[0]地址賦值p 38 39 while((q=strstr(p,dest))!=NULL) //將大字符串中小字符串的起始位地址賦給q 40 { 41 char a=*q; //將*q的值賦給a,以便還原 42 *q='\0'; //大字符串中首次出現小字符的位置,寫入0,作str字符串的結束位置 43 printf("%lu ",strlen(str));//統計的str長度即dest首次出現位置 44 *q=a; //還原字符串 45 p=q+1;//將str字符串q址址的下一地址作為p字符串開始位置 46 if(b==1) 47 b=0; //b=0,第二個字符串中找到第一個字符串 48 } 49 if(b) 50 printf("-1"); 51 printf("\n"); 52 53 return 0; 54 }