将从用户那里获取的大写字母放入数组中

Putting uppercase letters taken from user and putting into an array

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

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





   }

}

arr[i]+=uppercaseletters[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] = '[=10=]';
printf("%s", uppercaseletters);

您还需要像上面那样将 printf 放在循环之外 - 一旦填充了数组。

对于根据 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] != '[=15=]'; i++ )
    {
        if ( isupper( ( unsigned char )s[i] ) ) ++n;
    }

    char *upper_case_letters = malloc( n + 1 );

    n = 0;

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

    upper_case_letters[n] = '[=15=]';

    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] != '[=17=]'; i++ )
    {
        if ( isupper( ( unsigned char )s[i] ) )
        {
            upper_case_letters[n++] = s[i];
        }
    }

    upper_case_letters[n] = '[=17=]';

    puts( upper_case_letters );

    return 0;
}

我们会从用户那里得到一个系列,我们将A-Z的大写字母扔到另一个系列中打印在屏幕上。

其实它的逻辑很简单。在使用 'for' 循环浏览数组中的项目时,如果 A-Z 检测到字母,则会将其分配给新数组。

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

#include <stdio.h>
int main()
{

2) 创建数组和变量:

char arr[100], uppercaseletters[50];
int i=0, j=0;
//We created the variables 'i' and 'j' to navigate the characters of our series.

3) 让我们从用户那里获取数组:

printf("Enter array: ");
scanf("%s",&arr);

4) 让我们创建循环,首先 return 'i = 0' 和数组中的项目数。

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

for(i=0;arr[i]!='[=13=]';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'.
}
}

6) 让我们在屏幕上打印我们的大写数组。 此外,我们数组中的项目数是 'j'.

for(i=0;i<j;i++)
{
    printf("\n%c",uppercaseletters[i]);
}
//FİNİSH
return 0;
}

7) 希望对您有所帮助...

#include <stdio.h>
int main()
{
    char arr[100], uppercaseletters[50];
    int i=0, j=0;
    //We created the variables 'i' and 'j' to navigate the characters of our series.

    printf("Enter array: ");
    scanf("%s",&arr);

    for(i=0;arr[i]!='[=16=]';i++)
    {
        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'.
        }
    }

    for(i=0;i<j;i++)
    {
        printf("\n%c",uppercaseletters[i]);
    }
    //FİNİSH
    return 0;
}

我的英文不太好:)