0

这里有什么问题?

我想检查 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

4 回答 4

5

要正确测量字符串的长度,请使用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;
}
于 2016-03-03T18:03:43.970 回答
2

您缺少一个包含#include <ctype.h>

你也不需要你的 if陈述。toupper内部处理(如果你真的想在你的声明中islower删除)。intif

于 2016-03-03T17:27:28.737 回答
1

添加声明islower和的标头toupper

#include <ctype.h>

此外,

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

是不正确的。删除int.

    if(islower(arr[i])){
于 2016-03-03T17:26:44.890 回答
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++){
于 2016-03-03T17:44:45.503 回答