(原創) 如何判斷一個字串是否存在於另外一個字串? (C/C++) (C)

Abstract
C語言提供了strstr(),可以判斷一個字串是否存在於另外一個字串。

Introduction
文字檔有以下資料,若那一行有『$GPRMC』,則將整行資料讀取。

$GPGGA,114708.000,2510.5548,N,12127.1223,E,2,11,0.9,88.0,M,14.8,M,0.8,0000*49
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,21,31,,1.8,0.9,1.6*34
$GPRMC
,114708.000,A,2510.5548,N,12127.1223,E,0.09,111.84,030308,,,D*63
$GPGGA
,114709.000,2510.5548,N,12127.1222,E,2,11,0.9,88.0,M,14.8,M,0.8,0000*49
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,21,31,,1.8,0.9,1.6*34
$GPRMC
,114709.000,A,2510.5548,N,12127.1222,E,0.10,108.43,030308,,,D*68
$GPGGA
,114710.000,2510.5548,N,12127.1222,E,2,10,1.1,88.0,M,14.8,M,1.8,0000*48
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPGSV
,3,1,12,18,70,141,41,22,63,319,40,05,59,114,44,30,52,149,45*79
$GPGSV
,3,2,12,12,49,085,47,14,35,319,37,09,28,037,42,32,28,321,33*7D
$GPGSV
,3,3,12,31,21,242,37,21,17,192,25,01,14,298,32,15,04,092,*7E
$GPRMC
,114710.000,A,2510.5548,N,12127.1222,E,0.10,113.99,030308,,,D*6D
$GPGGA
,114711.000,2510.5548,N,12127.1223,E,2,10,1.1,88.0,M,14.8,M,0.8,0000*49
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114711.000,A,2510.5548,N,12127.1223,E,0.09,81.31,030308,,,D*5D
$GPGGA
,114712.000,2510.5548,N,12127.1223,E,2,10,1.1,88.0,M,14.8,M,0.8,0000*4A
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114712.000,A,2510.5548,N,12127.1223,E,0.11,52.87,030308,,,D*54
$GPGGA
,114713.000,2510.5548,N,12127.1222,E,2,10,1.1,88.0,M,14.8,M,0.8,0000*4A
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114713.000,A,2510.5548,N,12127.1222,E,0.10,24.51,030308,,,D*5F
$GPGGA
,114714.000,2510.5548,N,12127.1222,E,2,10,1.1,88.1,M,14.8,M,0.8,0000*4C
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114714.000,A,2510.5548,N,12127.1222,E,0.10,33.72,030308,,,D*5F
$GPGGA
,114715.000,2510.5549,N,12127.1222,E,2,10,1.1,88.1,M,14.8,M,0.8,0000*4C
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPGSV
,3,1,12,18,70,141,42,22,63,319,40,05,59,114,44,30,52,149,45*7A
$GPGSV
,3,2,12,12,49,085,46,14,35,319,37,09,28,037,42,32,28,321,33*7C
$GPGSV
,3,3,12,31,21,242,37,21,17,192,,01,14,298,32,15,04,092,*79
$GPRMC
,114715.000,A,2510.5549,N,12127.1222,E,0.10,24.90,030308,,,D*55
$GPGGA
,114716.000,2510.5549,N,12127.1222,E,2,10,1.1,88.2,M,14.8,M,1.8,0000*4D
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114716.000,A,2510.5549,N,12127.1222,E,0.11,21.64,030308,,,D*59
$GPGGA
,114717.000,2510.5549,N,12127.1222,E,2,10,1.1,88.3,M,14.8,M,0.8,0000*4C
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114717.000,A,2510.5549,N,12127.1222,E,0.10,28.42,030308,,,D*54
$GPGGA
,114718.000,2510.5549,N,12127.1221,E,2,10,1.1,88.4,M,14.8,M,0.8,0000*47
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114718.000,A,2510.5549,N,12127.1221,E,0.04,57.18,030308,,,D*5A
$GPGGA
,114719.000,2510.5549,N,12127.1221,E,2,10,1.1,88.4,M,14.8,M,0.8,0000*46
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114719.000,A,2510.5549,N,12127.1221,E,0.09,84.03,030308,,,D*52
$GPGGA
,114720.000,2510.5549,N,12127.1221,E,2,10,1.1,88.5,M,14.8,M,1.8,0000*4C
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPGSV
,3,1,12,18,70,141,41,22,63,319,39,05,59,113,44,30,52,149,43*76
$GPGSV
,3,2,12,12,49,085,46,14,35,320,36,32,28,321,32,09,27,037,41*7A
$GPGSV
,3,3,12,31,21,242,37,21,16,192,23,01,14,298,31,15,04,092,*7A
$GPRMC
,114720.000,A,2510.5549,N,12127.1221,E,0.09,81.95,030308,,,D*52
$GPGGA
,114721.000,2510.5549,N,12127.1221,E,2,10,1.1,88.5,M,14.8,M,2.8,0000*4E
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114721.000,A,2510.5549,N,12127.1221,E,0.09,82.52,030308,,,D*5B
$GPGGA
,114722.000,2510.5549,N,12127.1221,E,2,10,1.1,88.5,M,14.8,M,0.8,0000*4F
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114722.000,A,2510.5549,N,12127.1221,E,0.10,85.52,030308,,,D*57
$GPGGA
,114723.000,2510.5549,N,12127.1221,E,2,10,1.1,88.5,M,14.8,M,0.8,0000*4E
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114723.000,A,2510.5549,N,12127.1221,E,0.10,107.30,030308,,,D*69
$GPGGA
,114724.000,2510.5548,N,12127.1221,E,2,10,1.1,88.4,M,14.8,M,0.8,0000*49
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114724.000,A,2510.5548,N,12127.1221,E,0.10,70.03,030308,,,D*5E
$GPGGA
,114725.000,2510.5548,N,12127.1221,E,2,10,1.1,88.3,M,14.8,M,1.8,0000*4E
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPGSV
,3,1,12,18,70,141,41,22,63,319,39,05,59,113,44,30,52,149,43*76
$GPGSV
,3,2,12,12,49,085,46,14,35,320,36,32,28,321,32,09,27,037,41*7A
$GPGSV
,3,3,12,31,21,242,37,21,16,192,,01,14,298,31,15,04,092,*7B
$GPRMC
,114725.000,A,2510.5548,N,12127.1221,E,0.10,77.90,030308,,,D*52
$GPGGA
,114726.000,2510.5548,N,12127.1221,E,2,10,1.1,88.3,M,14.8,M,0.8,0000*4C
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114726.000,A,2510.5548,N,12127.1221,E,0.10,78.50,030308,,,D*52
$GPGGA
,114727.000,2510.5548,N,12127.1222,E,2,10,1.1,88.2,M,14.8,M,0.8,0000*4F
$GPGSA
,A,3,18,12,30,14,05,01,22,32,09,31,,,2.2,1.1,1.9*38
$GPRMC
,114727.000,A,2510.5548,N,12127.1222,E,0.10,87.65,030308,,,D*56
$GPGGA
,145212.002,,,,,0,00,,,M,0.0,M,,0000*55
$PSRFTXT
,Version:GSW3.2.2_3.1.00.12-SDK003P1.01a
$PSRFTXT
,Version2:F-GPS-03-0707261
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145212.002,V,,,,,,,030308,,,N*46
$GPGGA
,145213.007,,,,,0,00,,,M,0.0,M,,0000*51
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145213.007,V,,,,,,,030308,,,N*42
$GPGGA
,145214.002,,,,,0,00,,,M,0.0,M,,0000*53
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145214.002,V,,,,,,,030308,,,N*40
$GPGGA
,145215.002,,,,,0,00,,,M,0.0,M,,0000*52
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145215.002,V,,,,,,,030308,,,N*41
$GPGGA
,145216.006,,,,,0,00,,,M,0.0,M,,0000*55
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPGSV
,3,1,12,20,00,000,,10,00,000,,25,00,000,,27,00,000,*79
$GPGSV
,3,2,12,22,00,000,,07,00,000,,21,00,000,,24,00,000,*79
$GPGSV
,3,3,12,16,00,000,,28,00,000,,26,00,000,,29,00,000,*78
$GPRMC
,145216.006,V,,,,,,,030308,,,N*46
$GPGGA
,145217.000,,,,,0,00,,,M,0.0,M,,0000*52
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145217.000,V,,,,,,,030308,,,N*41
$GPGGA
,145218.000,,,,,0,00,,,M,0.0,M,,0000*5D
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145218.000,V,,,,,,,030308,,,N*4E
$GPGGA
,145219.005,,,,,0,00,,,M,0.0,M,,0000*59
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145219.005,V,,,,,,,030308,,,N*4A
$GPGGA
,145220.000,,,,,0,00,,,M,0.0,M,,0000*56
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145220.000,V,,,,,,,030308,,,N*45
$GPGGA
,145221.000,,,,,0,00,,,M,0.0,M,,0000*57
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPGSV
,3,1,12,20,00,000,,10,00,000,,25,00,000,,27,00,000,*79
$GPGSV
,3,2,12,22,00,000,,07,00,000,,21,00,000,,24,00,000,*79
$GPGSV
,3,3,12,16,00,000,,28,00,000,,26,00,000,,29,00,000,*78
$GPRMC
,145221.000,V,,,,,,,030308,,,N*44
$GPGGA
,145222.005,,,,,0,00,,,M,0.0,M,,0000*51
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145222.005,V,,,,,,,030308,,,N*42
$GPGGA
,145223.002,,,,,0,00,,,M,0.0,M,,0000*57
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145223.002,V,,,,,,,030308,,,N*44
$GPGGA
,145224.000,,,,,0,00,,,M,0.0,M,,0000*52
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145224.000,V,,,,,,,030308,,,N*41
$GPGGA
,145225.005,,,,,0,00,,,M,0.0,M,,0000*56$GPGGA,145226.002,,,,,0,00,,,M,0.0,M,,0000*52
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPGSV
,3,1,12,20,00,000,,10,00,000,,25,00,000,,27,00,000,*79
$GPGSV
,3,2,12,22,00,000,,07,00,000,,21,00,000,,24,00,000,*79
$GPGSV
,3,3,12,16,00,000,,28,00,000,,26,00,000,,29,00,000,*78
$GPRMC
,145226.002,V,,,,,,,030308,,,N*41
$GPGGA
,145227.002,,,,,0,00,,,M,0.0,M,,0000*53
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145227.002,V,,,,,,,030308,,,N*40
$GPGGA
,145228.005,,,,,0,00,,,M,0.0,M,,0000*5B
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145228.005,V,,,,,,,030308,,,N*48
$GPGGA
,145229.000,,,,,0,00,,,M,0.0,M,,0000*5F
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145229.000,V,,,,,,,030308,,,N*4C
$GPGSA
,A,1,,,,,,,,,,,,,,,*1E
$GPRMC
,145225.005,V,,,,,,,030308,,,N*45


C語言

1 /* 
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3 
4 Filename    : strstr.c
5 Compiler    : Visual C++ 8.0
6 Description : Demo how to test if a string is in another string.
7 Release     : 03/05/2008 1.0
8 */
9 #include <stdio.h>
10 #include <string.h> // strstr()
11 
12 #define LINE_LENGTH 255
13 #define FILENAME "GPSDATA.dat"
14 
15 int main() {
16   FILE *fp = fopen(FILENAME, "r");
17   char s[LINE_LENGTH];
18   char t[] = "$GPRMC"
19  
20   if (fp == NULL)
21     return -1;
22  
23   while(!feof(fp)) {
24     fscanf(fp, "%s", s);
25    
26     if (strstr(s, t))
27       printf("%s\n", s);
28   }
29  
30   fclose(fp);
31 }


執行結果

$GPRMC,114708.000,A,2510.5548,N,12127.1223,E,0.09,111.84,030308,,,D*6
$GPRMC
,114709.000,A,2510.5548,N,12127.1222,E,0.10,108.43,030308,,,D*6
$GPRMC
,114710.000,A,2510.5548,N,12127.1222,E,0.10,113.99,030308,,,D*6
$GPRMC
,114711.000,A,2510.5548,N,12127.1223,E,0.09,81.31,030308,,,D*5D
$GPRMC
,114712.000,A,2510.5548,N,12127.1223,E,0.11,52.87,030308,,,D*54
$GPRMC
,114713.000,A,2510.5548,N,12127.1222,E,0.10,24.51,030308,,,D*5F
$GPRMC
,114714.000,A,2510.5548,N,12127.1222,E,0.10,33.72,030308,,,D*5F
$GPRMC
,114715.000,A,2510.5549,N,12127.1222,E,0.10,24.90,030308,,,D*55
$GPRMC
,114716.000,A,2510.5549,N,12127.1222,E,0.11,21.64,030308,,,D*59
$GPRMC
,114717.000,A,2510.5549,N,12127.1222,E,0.10,28.42,030308,,,D*54
$GPRMC
,114718.000,A,2510.5549,N,12127.1221,E,0.04,57.18,030308,,,D*5A
$GPRMC
,114719.000,A,2510.5549,N,12127.1221,E,0.09,84.03,030308,,,D*52
$GPRMC
,114720.000,A,2510.5549,N,12127.1221,E,0.09,81.95,030308,,,D*52
$GPRMC
,114721.000,A,2510.5549,N,12127.1221,E,0.09,82.52,030308,,,D*5B
$GPRMC
,114722.000,A,2510.5549,N,12127.1221,E,0.10,85.52,030308,,,D*57
$GPRMC
,114723.000,A,2510.5549,N,12127.1221,E,0.10,107.30,030308,,,D*6
$GPRMC
,114724.000,A,2510.5548,N,12127.1221,E,0.10,70.03,030308,,,D*5E
$GPRMC
,114725.000,A,2510.5548,N,12127.1221,E,0.10,77.90,030308,,,D*52
$GPRMC
,114726.000,A,2510.5548,N,12127.1221,E,0.10,78.50,030308,,,D*52
$GPRMC
,114727.000,A,2510.5548,N,12127.1222,E,0.10,87.65,030308,,,D*56
$GPRMC
,145212.002,V,,,,,,,030308,,,N*46
$GPRMC
,145213.007,V,,,,,,,030308,,,N*42
$GPRMC
,145214.002,V,,,,,,,030308,,,N*40
$GPRMC
,145215.002,V,,,,,,,030308,,,N*41
$GPRMC
,145216.006,V,,,,,,,030308,,,N*46
$GPRMC
,145217.000,V,,,,,,,030308,,,N*41
$GPRMC
,145218.000,V,,,,,,,030308,,,N*4E
$GPRMC
,145219.005,V,,,,,,,030308,,,N*4A
$GPRMC
,145220.000,V,,,,,,,030308,,,N*45
$GPRMC
,145221.000,V,,,,,,,030308,,,N*44
$GPRMC
,145222.005,V,,,,,,,030308,,,N*42
$GPRMC
,145223.002,V,,,,,,,030308,,,N*44
$GPRMC
,145224.000,V,,,,,,,030308,,,N*41
$GPRMC
,145226.002,V,,,,,,,030308,,,N*41
$GPRMC
,145227.002,V,,,,,,,030308,,,N*40
$GPRMC
,145228.005,V,,,,,,,030308,,,N*48
$GPRMC
,145229.000,V,,,,,,,030308,,,N*4C
$GPRMC
,145225.005,V,,,,,,,030308,,,N*45
$GPRMC
,145225.005,V,,,,,,,030308,,,N*45

關鍵在26行的strstr()函數,其原型為

char *strstr(const char *str1, const char *str2);

str1為原始字串,為尋找時比對的原始資料,str2為指定要尋找的字串,若有找到的話,傳回值傳回一個指標,指向找到字串的啟始位置,萬一沒有找到,就傳回NULL。

Reference
日向俊二. 2006, C/C++辭典 3rd, 博碩文化

posted on 2008-03-05 10:52  真 OO无双  阅读(2805)  评论(2编辑  收藏  举报

导航