2017-10-16 78 views
0

这是一个将sting的字母转换成大写或小写的程序。我不知道这段代码有什么问题。当我运行它时,它省略了第一个字母。如果我给出字符串“Lets out out”,则输出为 “ETS GO OUT”(将“L”排除在外,不应该发生)转换为大写字母并且“ts out out”(“ le“被排除在外,这是不应该发生的)当转换为小写。我使用codeblocks。请有人帮助我:'(这个用C编写的程序没有给出正确的输出

#include<ctype.h> 
#include<stdio.h> 

int main() 
{ 
    char str[80],*p; 

    printf("Enter A String\n"); 

    gets(str); 

    p=str; 

    while(*p) 
     *p++=toupper(*p); 

    printf("After uppercase conversion: %s\n",str); 

    p=str; 

    while(*p) 
     *p++=tolower(*p); 

    printf("After lowercase conversion: %s\n",str); 


    return 0; 
} 
+2

不要使用'gets' –

+5

在'* p ++ = tolower(* p)'这个表达式中,你认为'p'的值是否在RHS上? –

回答

2

while循环等同于下面的代码:

while (*p) 
{ 
    *p = tolower(*(p+1)); 
    p = p+1; 
} 

因此,要解决这个问题,你可以使用一个for循环例如,像这样:

#include<ctype.h> 
#include<stdio.h> 

int main() 
{ 
    char str[80],*p; 

    printf("Enter A String\n"); 

    gets(str); 

    for (p = str; *p != '\0'; p++) 
     *p = toupper(*p); 

    printf("After uppercase conversion: %s\n",str); 

    for (p = str; *p != '\0'; p++) 
     *p = tolower(*p); 

    printf("After lowercase conversion: %s\n",str); 


    return 0; 
}