문자 배열에서 요소를 제거하거나 특정 요소없이 새 배열의 복사본을 만드는 방법은 무엇입니까?

마스터 Maq

내 과제의 목적은 사용자 입력 문자열을 받아 사용자가 입력 한 영문자 (소문자와 대문자 모두)를 출력하는 것입니다.

예를 들어 사용자가 입력 D_!an!_ i12el하면 출력은 Daniel. 내 접근 방식은 입력을 반복하고 알파벳이 아닌 모든 문자를 제거하는 것이었지만 방법을 모르겠습니다. 아이디어가 있으면 도와주세요! 이것이 내가 지금까지 가지고있는 것입니다.

#include <stdio.h>
#include <string.h>

int main()
{

char my_array[100];

    printf("Enter a message: ");;

    while(strlen(gets (my_array)) == 0);
    printf(" Your message is: %s\n", my_array);

    for(int i = 0; i< strlen(my_array);i++)
    {
        if(my_array[i] < 'A' || my_array[i] > 'z')
        {
           my_array[i] = ' ';
        }
    }
    printf(" Your new message is: %s\n", my_array);
}

편집 : 알파 문자 만 인쇄하도록 루프가 작동했지만 요소를 인쇄 할 때 추가 문자가 계속 추가됩니다. 예를 들어 D_! a _ * & Ni # 32el은 DaNielASCIIV가됩니다. 왜 이런 일이 일어나는지 모르겠습니다.

 for(int i = 0; i< 100;i++)
    {
        if (isalpha(message[i]))
        {
            putchar(message[i]);
        }
    }
dbush

가지고있는 문자열을 업데이트하는 대신 문자 인 경우 문자를 인쇄하십시오.

또한 대문자와 소문자가 바로 뒤 따르지 않으므로 별도로 확인해야합니다.

printf(" Your new message is: ");
for(int i = 0; i< strlen(my_array);i++)
{
    if((my_array[i] >= 'A' && my_array[i] <= 'Z') || 
       (my_array[i] >= 'z' && my_array[i] <= 'z'))
    {
       putchar(my_array[i]);
    }
}
printf("\n");

또는 위의 if조건을이를 확인하는 함수로 바꿀 수 있습니다 .

if (isalpha(my_array[i]))

편집하다:

이제 추가 문자가 표시되는 이유는 문자열 길이 대신 전체 배열을 반복하도록 루프를 변경했기 때문입니다. strlen(my_array)대신 사용으로 돌아 100가면 괜찮을 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관