c++搜尋比對

假設有個資料夾是 " name.txt "

裡面的內容是號碼亂數

譬如:

123134212343214312243124321241241233212121213413414343213443444431324211434324342432134224243134243223234231423123

寫個程式開啟檔案

並設一個使用者輸入

如輸入:1234211 (7個數字)

程式自動搜尋有"兩個以上相同"的字串 (也是7個數字)

映出位置

2~9 1232433

11~18 *******

.

.

.

.

.

請哪位大大可以幫忙解答一下^^

兩個以上不包含只有兩個

Update:

相同字串必須是連續喔!!!!

譬如輸入: 1234231

結果:

1~8 "123"3241

9~16 "123"2213

Update 2:

大大如果搜尋比對的是英文

我該從哪裡去改??

3 Answers

Rating
  • Thomas
    Lv 6
    1 decade ago
    Favorite Answer

    覺得寫的蠻 verbose, 但執行結果 OK, 就 PO 上了

    #include<stdio.h>

    #include<string.h>

    #include<stdlib.h>

    int main()

    {

    FILE *fp;

    char c, InStr[100], Target[100];

    int i, index, len, fptr, same;

    bool ErrFlag=false, success;

    gets(InStr);

    len = strlen(InStr);

    if (len < 3) ErrFlag = true;

    for(i=0; i < len; i++)

    if (InStr[i] < '0' || InStr[i] > '9')

    {

    ErrFlag = true;

    break;

    }

    if (ErrFlag)

    {

    printf("輸入非數字!結束!");

    system("pause");

    return 0;

    }

    Target[0]= InStr[0];

    Target[1]= InStr[1];

    Target[2]= InStr[2];

    Target[len]=0;

    fp =fopen("c:\\name.txt", "r");

    index = 0; //比對第幾個

    fptr = 0;

    while ( (c = fgetc(fp))!= EOF)

    {

    fptr++;

    if ( c < '0' || c > '9' || c!=InStr[index])

    {

    index = 0; //重新找

    }

    if (c == InStr[index]) //比對

    index++;

    if (index == 3) //找到候選

    {

    same = -1;

    success = true;

    for (i = 3; i < len; i++)

    {

    if ((Target[i] = fgetc(fp))!=EOF)

    fptr++;

    else

    {

    success = false;

    break;

    }

    if ( Target[i] < '0' || Target[i] > '9')

    {

    success = false;

    break;

    }

    if (Target[i] != InStr[i] && same == -1)

    same = i; //相同字元數

    }

    if(success) //找到

    {

    c=Target[same];

    Target[same]=0;

    printf("%d~%d: \"%s\"", fptr-len+1, fptr, Target);

    Target[same] = c;

    printf("%s\n", Target+same);

    }

    index = 0;

    }

    }

    system("pause");

    return 0;

    }

    1234512333232323123331111112222222212345123111111111234411111111 12 12 12 12 12 2999999

    1234567 來找

    結果

    1~7: "12345"12

    17~23: "123"3311

    36~42: "12345"12

    52~58: "1234"411

    雖然: 6~12為1233323, 但因部份已含在 1~7, 所以不選出

    2008-06-02 09:55:23 補充:

    三個地方要改.

    .

    .

    if (!(('a' <=InStr[i] && InStr[i] <= 'z') || ('A' <=InStr[i] && InStr[i] <='Z')))

    {

    ErrFlag = true;

    break;

    }

    .

    .

    .

    if ( !(('a' <=InStr[i] && InStr[i] <= 'z') || ('A' <=InStr[i] && InStr[i] <='Z'))

    || c!=InStr[index])

    {

    index = 0; //重新找

    }

    .

    .

    .

    2008-06-02 09:55:54 補充:

    .

    .

    if (!(('a' <=InStr[i] && InStr[i] <= 'z') || ('A' <=InStr[i] && InStr[i] <='Z')))

    {

    success = false;

    break;

    }

    .

    .

    .

    • Login to reply the answers
  • 1 decade ago

    若輸入者入7個數字

    搜尋到的也要7個數字

    且前面三碼一定要連續一樣才成立

    最前面那些2~9阿

    是位置

    2008-05-29 11:05:39 補充:

    name.txt 內容沒跨行喔

    • Login to reply the answers
  • 大豬
    Lv 4
    1 decade ago

    不太明白

    (也是7個數字)

    ...

    2~9 1232433

    11~18 *******

    以上這些是8個數字???

    ~8 "123"3241

    9~16 "123"2213

    這又是什麼???

    name.txt 內容是否有跨行( ) 若有, 上下兩行是不是當做連續???

    • Login to reply the answers
Still have questions? Get your answers by asking now.