如何在 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;
}

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

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

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

添加声明 islowertoupper 的标头。

#include <ctype.h>

此外,

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

是不对的。删除int

    if(islower(arr[i])){

这里有什么问题?

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

在代码的这一行中,可能会超出应有的位置:

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

正如您可能正在查看字符串终止符之后的空间一样:

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

相关内容

  • 没有找到相关文章

最新更新