c - 将从用户处获取的大写字母放入数组中

标签 c char c-strings uppercase letter

在这段代码中,我试图从用户那里获取一个字符串,并将大写字母放入另一个数组中,然后打印它。但我知道我做了一些严重错误的事情,有人可以帮助我处理这段代码吗?

#include<string.h>

int main() {
   char arr[100],uppercaseletters[50];
   printf("Enter array:");
   scanf("%s",arr);
   strlen(arr);
   printf("The lenght of string is: %d\n",strlen(arr));
   for(int i=0;i<=strlen(arr);i++){
    if(arr[i]>='A' && arr[i]<='Z'){
        arr[i]+=uppercaseletters[50];
        printf("%s",uppercaseletters);
       }





   }

}

最佳答案

对于根据 C 标准的初学者,不带参数的函数 main 应声明为

int main( void )

尚不清楚为什么数组 uppercaseletters 的元素少于数组 arr 的元素。

char arr[100],uppercaseletters[50];

用户可以输入仅由大写字符组成的字符串。

本声明

strlen(arr);

没有效果。

本声明

arr[i]+=uppercaseletters[50];

没有意义。您必须填充数组uppercaseletters。此外,元素 uppercaseletters[50] 不存在,因为索引的有效范围是 [0, 50)

在此声明中

printf("%s",uppercaseletters);

您正在尝试输出未初始化的数组。

该程序可以如下所示。

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

int main(void) 
{
    enum { N = 100 };
    char s[N];

    printf( "Enter a string: " );

    fgets( s, sizeof( s ), stdin );

    size_t n = 0;

    for ( size_t i = 0; s[i] != '\0'; i++ )
    {
        if ( isupper( ( unsigned char )s[i] ) ) ++n;
    }

    char *upper_case_letters = malloc( n + 1 );

    n = 0;

    for ( size_t i = 0; s[i] != '\0'; i++ )
    {
        if ( isupper( ( unsigned char )s[i] ) )
        {
            upper_case_letters[n++] = s[i];
        }
    }

    upper_case_letters[n] = '\0';

    puts( upper_case_letters );

    free( upper_case_letters );

    return 0;
}

程序输出可能类似于

Enter a string: Hello World!
HW

如果不动态分配大写字母数组,程序可以如下所示。

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

int main(void) 
{
    enum { N = 100 };
    char s[N];
    char upper_case_letters[N];

    printf( "Enter a string: " );

    fgets( s, sizeof( s ), stdin );

    size_t n = 0;

    for ( size_t i = 0; s[i] != '\0'; i++ )
    {
        if ( isupper( ( unsigned char )s[i] ) )
        {
            upper_case_letters[n++] = s[i];
        }
    }

    upper_case_letters[n] = '\0';

    puts( upper_case_letters );

    return 0;
}

关于c - 将从用户处获取的大写字母放入数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59851390/

相关文章:

c++ - SIGSEGV 动态分配内存接收FTP服务器的LIST响应时

c - 在 Windows 上学习 IOCP 的资源

c - 为什么 char[] 工作,但 char * 不

java - 按字符对数组中的字符串进行排序

c - snprintf,用于 C 中整数到字符串的转换

c++ - 此断点当前不会被命中 : Dll debugging

c - 防止c中输出字符重复

linux - 如何让system()函数畅通无阻?

python - 在需要 float 的 python3 中使用 ctypes 时得到 'nan'

c++ - 在 C++ 中将字节写入 ofstream