2013-03-06 71 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