【问题标题】:How to toupper char array in c? [closed]如何在c中填充char数组? [关闭]
【发布时间】:2016-03-03 17:21:19
【问题描述】:

这里有什么问题?

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

【问题讨论】:

  • 不需要先测试是否小写。 toupper 除非有事可做,否则不会做任何事。
  • 语法是怎么回事:if(int islower(arr[i]))...?为什么是int?另外,请注意 toupper 如果没有大写等效项,将再次返回相同的字符(请阅读文档!)。所以你根本不需要if 语句。
  • 你的代码有什么问题?什么不起作用?
  • 您正在访问数组的未初始化元素。您应该将循环限制为strlen(arr),而不是sizeof(arr)
  • 使用scanf("%s", &amp;arr); 在三个方面是错误的:(1)你应该限制输入("%99s"),(2)你不应该使用&amp;,因为它传递了一个char (*)[100],其中char * 是预期的,并且 (3) 在使用结果之前,您应该检查 scanf() 报告的返回值是否为 1。

标签: c arrays toupper


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您缺少包含 #include &lt;ctype.h&gt;

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

    【讨论】:

      【解决方案3】:

      添加声明islowertoupper 的标头。

      #include <ctype.h>
      

      此外,

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

      不对。删除int

          if(islower(arr[i])){
      

      【讨论】:

        【解决方案4】:

        这里有什么问题?

        行: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-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          相关资源
          最近更新 更多