C語言程序設計進階 第1周編程題


第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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM