如何在c中使用toupper char数组?

时间:2016-03-03 17:21:20

标签: c arrays toupper

这里有什么不对吗?

我想检查char数组中的char是否更低,所以如果是,则应该以大写形式更改。

#include <stdio.h>

int main(int argc, char *argv[]) {
    char arr[100];
    scanf("%s",&arr);
    for(int i=0;i<sizeof(arr);i++){
        if(int islower(arr[i])){
            arr[i] = toupper(arr[i]);
        }
    }
    printf("%s",arr);
    return 0;
}

4 个答案:

答案 0 :(得分:3)

要正确测量字符串的长度,请使用strlen,而不是sizeof

for(int i=0;i<strlen(arr);i++){ // Don't use sizeof on this line

这是一个更简单的版本:

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

int main(int argc, char *argv[]) {
    char arr[100];
    scanf("%s", arr);

    for(int i=0;i<strlen(arr);i++){
        arr[i] = toupper(arr[i]);
    }

    printf("%s",arr);
    return 0;
}

甚至:

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

int main(void) {
    char arr[100];
    scanf("%s", arr);

    for(char* c=arr; *c=toupper(*c); ++c) ;

    printf("%s",arr);
    return 0;
}

答案 1 :(得分:2)

您缺少包含routes.MapRoute( name: "Perfil", url: "Pages/{id}", defaults: new { controller = "Pages", action = "Index", id = UrlParameter.Optional } );

此外,您不需要#include <ctype.h>声明。 toupper会在内部处理(如果您真的希望if删除islower声明中的int

答案 2 :(得分:1)

添加声明islowertoupper的标头。

#include <ctype.h>

另外,

    if(int islower(arr[i])){

不对。删除int

    if(islower(arr[i])){

答案 3 :(得分:1)

这里有什么不对吗?

行:if(int islower(arr[i])){因错误表达而无法编译 更改为:if(islower(arr[i])){

在你的代码中的这一行可能会超出它应该的位置:

for(int i=0;i<sizeof(arr);i++){

因为您可能正在查看字符串终止符之后的空格:

|s|t|r|i|n|g|\0|<unknown contents here, part of your legal memory, but are not part of the string>  

应该

int len = strlen(arr);
for(int i=0;i<len;i++){