如何在 c 中对 char 数组进行优化?

How to toupper char array in c?

这里有什么问题吗?

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

添加声明 islowertoupper 的 header。

#include <ctype.h>

此外,

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

不对。删除 int.

    if(islower(arr[i])){

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

此外,您不需要 if 声明。 toupper 会在内部处理(如果您真的想保留 islower,请删除 if 语句中的 int)。

这里有什么问题吗?

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

并且在您的代码的这一行中,可能超出了应有的范围:

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

您可能正在查看 space 字符串终止符之后的内容:

|s|t|r|i|n|g|[=11=]|<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++){

要正确测量字符串的长度,请使用 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;
}