2013-09-23 3 views
-1

편지를 입력하면 목록에서 문자를 버리는 프로그램을 만들고 있습니다. 아무도 도와 줄 수 있습니다. 감사. 예알파벳을 입력 한 다음 알파벳을 빼기

:

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

int main() 
{ 
    int alphabet[26]; 
    char letter; 
    int i; 
    int j; 

    alphabet[0] = 'A'; 
    for(i = 0;i < 26; i++) 
    { 
     alphabet[i] = alphabet[0]; 
     printf ("%c", alphabet[i], alphabet[i]); 
     alphabet[0]++; 
    } 

     printf("\n\nenter the letter you want to remove in the alphabet: "); 
     scanf("%c", letter); 

     while(j<alphabet[i]) 
     { 
      if(letter==alphabet[i]) 
      { 
       j--; 
      } 
     } 
} 
: A는

('A'A LETTER를 입력 한 후)

_BCDEFGHIJKLMNOPQRSTUVWXYZ

문자를 입력

: 는 (전)

는 ABCDEFGHIJKLMNOPQRSTUVWXYZ 는 문자를 입력

문제는 알파벳 wh에서 문자를 제거하지 않는 것입니다. 나는 내가 제거하고 싶은 편지를 입력했습니다. 도와주세요. 감사.

EDIT : 마지막으로 한 가지만 입력하면됩니까? 두 번째로 동일한 문자를 입력하면 "이미 문자를 입력했습니다."라고 말합니다.

+0

문제는 무엇인가 요구 사항을 설명하면 경우에 비록 당신이 정말 수있는 건 내가 그 수는 더 나은 디자인을 만들 생각

alphabet[j] = ' '; 

하여 "빈"편지를 확인하는 것입니다? 귀하의 프로그램에서 효과가없는 것은 무엇입니까? –

+0

@ Étienne 죄송합니다. 질문을 잊어 버렸습니다. 문제는 내가 제거하고 싶은 문자를 입력 할 때 알파벳으로 문자를 제거하지 않는 것입니다. – user2803376

+0

배열에 Characters를 쓰는 대신 char의 정수 값을 쓸 수 있으며 그것을 인쇄하면 문자로 변환 할 수 있습니다 (이 최소한의 예제에서는 많은 성능을 얻지는 못하지만 다른 작업;)) 컴퓨터가 int로 괜찮기 때문에) – Martin

답변

1

당신은 문자가 ASCII와 같이 연속체라고 가정하고 있지만 C에는 그 것을 가정 할 수 없습니다.

printf ("%c", alphabet[i], alphabet[i]); 

드롭 마지막 alphabet[i] :

다음 줄은 중복 인수를 가지고 있습니다.

마지막 if() 문장이 잘못되었습니다. 비교는 ==으로 완료되어야합니다.

뭘 원하는지 전혀 분명하지 않습니다.

편집 :

나는이 방법으로 프로그램을 할 것

:

#include <stdio.h> 

int main() 
{ 
    char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    char letter; 

    printf("Choose a letter: "); 
    letter = getchar(); 

    printf("\n\n"); 

    for(int i = 0; i < 26; i++) 
     if (letter == alphabet[i]) 
     { 
      alphabet[i] = '_'; 
      break; /* This terminates the for() loop */ 
     }   

    printf("Result: %s \n", alphabet); 
} 

EDIT2 : 문자열 상수 나중에 수정할 수 있기 때문에 내가 ...

, alphabet의 선언을 변경 한
+0

선생님, 내가하고 싶은 것은 내가 편지를 입력 할 때, 그것은 알파벳으로 입력 된 편지를 제거합니다. 미안 해요 프로그래밍에서 그 프로. – user2803376

+0

그래,하지만 항상 '사실'이기 때문에 마지막 비교가 잘못되었습니다. 당신은 임무를 수행하고 있습니다. '='를'=='로 변경하십시오. – pablo1977

+0

나는 이미 그것을 바꾼다. 그래서 내가 제거하고 싶은 편지를 입력 한 후에 어떻게 알파벳에서 문자를 제거 할 수 있습니까? – user2803376

1

너는 값을 letter으로 지정하고

letter=alphabet[i] 

alphabet[i]0이 아닌 이상이 진술은 항상 true입니다. 당신을 비교 한가 정의되지 않도록 j의 값이, 처음에 정의되지 않습니다으로

사용을 비교 한 대신

letter==alphabet[i] 

또한 while 루프는 조금 이상한 것입니다.

while(j<alphabet[i]) 
    { 
     if(letter=alphabet[i]) 
     { 
      j--; 
     } 

아마 당신은 단순히 같은 싶지 : 당신 만의 편지를 선두를 교체 할 경우

for(i = 0;i < 26; i++) { 
     if(alphabeth[i]==letter) { 
      alphabeth[i]='_'; 
     } 
    } 

삽입을 break; 'alphabeth[i]='_';

당신은 아마 돈 후 소스 코드에 "26"과 같은 마술 값이 여러 번 나타나길 원합니다.

대신

#define ALPHABETSIZE 26 

같은 것을 사용하고 난 당신이 바로 당신이 당신의 배열을 통해 이동하고 입력 문자 배열의 모든 일치 여부를 확인하려면 가지고있는 경우 ALPHABETSIZE

+0

나는 그것을 이미 바꿨지 만 알파벳에서 입력 한 문자를 지우지 않았습니다. – user2803376

0

에 의해 26의 모든 발행 수를 교체 .

왜 이렇게 for 루프를 사용하지 않고 while 문 대신 배열 위치를 0으로 설정해야합니까?

여기에 문제가 있습니까?

+1

'alphabet [i] = 0'을 쓰면 출력물이 깨집니다. 사용자가 'C'를 입력하면 다음 인쇄물은 * AB * –

+0

@ umläute 만 인쇄 할 것입니다. 물론 그렇습니다. 주석을 사용하여 정수를 사용할 수 있다는 의견에 내 문장에 연결했습니다. chars ... 나는 내 게시물에서이 글을 편집합니다. 감사합니다. – Martin

+0

예 : 알파벳의 글자와 일치 할 때, _로 바뀌고 다시 입력 할 수 없습니다. – user2803376

0

당신이 힘들게하기 위해 여기에 몇 가지 것들이 있습니다.

당신은 "=="하지 "="두 변수

을 비교하는 데 사용할 필요가 그래서 초기화되지 않는다 "J"에 대한 귀하의 값은 "j--"

그것의 아마 더 잘 정의되지 않은 것

모든 유형을 동일하게 유지하고 배열을 "int"배열이 아닌 "char"배열로 만듭니다.

배열에서 요소를 제거하려면 "int alphabet [26];" 이것은 매우 어려울 것이며, 아마도 이것을 "문자열"운동으로 만드는 것이 더 쉬울 것입니다. 더 명확하게 :)

+0

다음과 같이하면 :'char alphabet [27] = { 'a'- 'z'}'그러면 알파벳으로 입력 한 문자를 어떻게 제거 할 수 있습니까? – user2803376

+1

고정 크기의 배열이며 크기를 변경할 수 없으므로 제거 할 문자 대신 다른 문자를 넣을 수 있습니다. 예 : { 'a', 'b', 'c'}를 가질 때 'b'를 제거 할 수 없으므로 { 'a', 'c'} (이 경우 배열이 아닌 목록을 사용해야합니다) '대신'b '를 사용하고 {'a ',' ','c '}를 얻고 공간을 제거 된 요소로 취급하십시오. – zoska

+0

정확히 (+1) ... 아마도 "abc .... xyz"로 "문자열"을 만든 다음 그 문자열을 사용하여 새 문자열을 만듭니다 ('a'를 제거 할 수 있습니다 '). bc ... xyz ". 이것은 당신의 솔루션과 매우 다르지만 그다지 어렵지는 않습니다. 그런 일을하기 위해 메모리를 할당하고 할당을 해제해야합니다 ... (strcpy와 strcat 같은 것을 찾으십시오) –

관련 문제