2013-03-06 162 views
-1

我一直在這裏一段時間,真的可以使用一些幫助。我正在製作一個密碼程序,其中一個函數測試開始和結束之間的字符是否有中間大寫字母。這是我曾嘗試:如何使用指針讀取字符串中間的字符?

int hasMiddleUpper(char *pass) { 
    int test=0, testu=0, testl=0, count; 
    char c; 

    while (c = *pass++) { 
    test++; 
    } 
    pass = pass - test + 1; 

    while (c = *pass++) { 
    if (isupper(c)) { 
     testu=1; 
    } 
    } 
    pass--; 

    while (c = *pass++) { 
    if (isupper(c)) { 
     testl=2; 
    } 
    } 
    count = testu + testl; 

    if (count==1) { 
    return 1; 
    } 
    else { 
    return 0; 
    } 

} 



int pwstrength(char *pass) 
{ 
    int test, test1,test2, test3, result; 
    test= hasUpperAndLower(pass); 
    test1 = hasAlphaDigits(pass); 
    test2 = hasEightOrMore(pass); 
    test3 = hasMiddleUpper(pass); 
    result = test + test1 + test2 + test3; 
    return result; 
} 

int main(void) { 
    int a; 
    char *p= "Pass3wordD"; 
    a= pwstrength(p); 
    printf("%d \n", a); 
    system("Pause"); 
} 
+0

我遇到的問題是它讀取了我試圖避免的結束字符。 – user2023608 2013-03-06 20:32:02

+0

你有沒有一個你想要做什麼的例子? '如何使用指針讀取字符串中間的字符?'並不是什麼問題......你想讀哪些字母?你在跟他們做什麼?你稱之爲字符串的「中間」是什麼? – Mike 2013-03-06 20:33:33

+1

..還有,你沒有縮進? – 2013-03-06 20:34:41

回答

3
int hasMiddleUpper(char *pass) 
{ 
    char c; 
    if (! (pass && *pass)) return 0; 

    while (c = *(++pass)) // dont test first 
    { 
     if (isupper(c) && *(pass+1)) return 1; // only if not the last 
    } 

    return 0; 
} 

這是你需要什麼?

但是,你必須使用指針嗎?索引可能更簡單。

+0

是的,確切!非常感謝,我不知道我在做什麼。 – user2023608 2013-03-06 20:56:26

+0

另外,我將不得不堅持將函數的字符串作爲「cont char *」傳遞,然後使用函數的局部指針遍歷字符串。這將使其適用於更多情況。 – AxelOmega 2013-03-06 21:06:55