C 将取自用户的大写字母放入数组

C 将取自用户的大写字母放入数组,c,char,c-strings,uppercase,letter,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:

在这段代码中,我试图从用户那里获取一个字符串,并将大写字母放入另一个数组中,然后打印它。但我做了一些可怕的错误,我可以告诉,有人能帮我这个代码吗

#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);
       }





   }

}

#包括
int main(){
字符arr[100],大写字母[50];
printf(“输入数组:”);
scanf(“%s”,arr);
斯特伦(arr);
printf(“字符串长度为:%d\n”,strlen(arr));
对于(int i=0;i='A'&&arr[i]
arr[i]+=大写字母[50]

这是错误的。您要将大写字母添加到新数组中,然后使用单独的索引,例如j:

int j = 0;
int len = strlen(arr);
for (int i = 0; i < len-1; i++)
{
    if (arr[i] >= 'A' && arr[i] <= 'Z')
    {
        // arr[i]+=uppercaseletters[50];
        if(j < 49)
        {
            uppercaseletters[j++] = arr[i];
        }
    }
}
uppercaseletters[j] = '\0';
printf("%s", uppercaseletters);
intj=0;
int len=strlen(arr);
对于(int i=0;i根据C标准,如果(arr[i]>='A'&&arr[i]用于启动器,则不带参数的主功能应声明如下

int main( void )
不清楚为什么数组
大写字母
的元素少于数组
arr

char arr[100],uppercaseletters[50];
用户可以输入仅由大写字符组成的字符串

此声明

strlen(arr);
arr[i]+=uppercaseletters[50];
printf("%s",uppercaseletters);
没有效果

此声明

strlen(arr);
arr[i]+=uppercaseletters[50];
printf("%s",uppercaseletters);
没有意义。您必须填充数组
大写字母
。而且元素
大写字母[50]
不存在,因为索引的有效范围是
[0,50)

在这份声明中

strlen(arr);
arr[i]+=uppercaseletters[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;
}
#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;
}
在不动态分配大写字母数组的情况下,程序可以按如下方式运行

#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;
}
#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;
}
#包括
#包括
内部主(空)
{
枚举{N=100};
chars[N];
字符大写字母[N];
printf(“输入字符串:”);
fgets(s、sizeof(s)、stdin);
尺寸n=0;
对于(大小i=0;s[i]!='\0';i++)
{
if(isupper((无符号字符)s[i]))
{
大写字母[n++]=s[i];
}
}
大写字母[n]='\0';
puts(大写字母);
返回0;
}

我们将从用户那里获得一个系列,我们将把a-Z大写字母扔到另一个系列,并在屏幕上打印出来

事实上,它的逻辑非常简单。在使用“for”循环导航数组中的项时,如果A-Z检测到字母,它会将其分配给新数组

1) 让我们添加标准输入/输出库并添加初始函数:

#include <stdio.h>
int main()
{
3) 让我们从用户处获取阵列:

printf("Enter array: ");
scanf("%s",&arr);
4) 让我们创建循环,首先返回“i=0”和数组中的项数

数组中的项数可以通过-strlen或-arr[i]!='\0'找到

for(i=0;arr[i]!='\0';i++)
{
5) 让我们将条件添加到循环中。 如果“i”元素大于A小于Z,则将其添加到另一个数组中

if(arr[i]>='A'&& arr[i]<='Z')
{
    uppercaseletters[j++] = arr[i];
    //The reason we do 'j++' is to add to the 0th element of the array at first and it will be 'j = 1', then it will add to the 1st element and it will continue as 'j = 2'.
}
}

if(arr[i]>='A'&&arr[i]
arr[i]+=大写字母[50]
这是什么怪事?
我正在努力学习xD@Pablo
I即使假设你的代码是正确的,想想看:如果用户输入一个超过50个大写字符的字符串会发生什么情况?…而将
strlen
放在
for
中是一个巨大的性能打击…@Pablo听起来像是在经历一场灾难正式代码审查;)谢谢Mate我不认为有必要在这里使用
malloc
,您可以声明
char大写字母[N]
。除此之外,还有很好的解释。