Ввод заглавных букв, взятых у пользователя, и помещение в массив - PullRequest
2 голосов
/ 22 января 2020

В этом коде я пытаюсь взять строку у пользователя и поместить заглавные буквы в другой массив, а затем распечатать его. Но я делаю что-то ужасно неправильно, я могу сказать, может кто-нибудь помочь мне с этим кодом?

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





   }

}

Ответы [ 3 ]

2 голосов
/ 22 января 2020

Для начинающих согласно стандарту 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;
}
1 голос
/ 22 января 2020

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

Вам также нужно поставить printf за пределами l oop, как указано выше - один раз массив заполнен.

0 голосов
/ 22 января 2020

Мы получим серию от пользователя, перекинем заглавные буквы AZ в другую серию и напечатаем ее на экране.

На самом деле ее логика c очень проста. При навигации по элементам в массиве с помощью 'for' l oop, если AZ обнаруживает буквы, он присваивает его новому массиву.

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) Давайте создайте наш l oop, сначала верните 'i = 0' и количество элементов в массиве.

Количество элементов в массиве можно найти с помощью -strlen или -arr [i]! = '\ 0'.

for(i=0;arr[i]!='\0';i++)
{

5) Давайте добавим условие к l oop. Если элемент '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]!='\0';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;
}

Мой английский sh не так хорош :)

...