2016-10-09 6 views
-8

이 프로그램을 해결하는 알고리즘을 사용할 수 있습니까?C에서 ASCII 코드를 증가시켜 다음 문자 인쇄 #

사용자가 문자열을 입력하고 ASCII 값을 사용하여 문자열의 모든 알파벳을 증가시키고 콘솔 응용 프로그램 C#에서 출력을 인쇄하는 프로그램을 작성하십시오.

는 (사용자가 입력하면 ABCD 것처럼 BCDE를 출력 할 것이다.)

+3

그래서 불행히도, 코드 작성 공장되지 않습니다 : 당신이 foreach 등 여러 가지 분해 기술을 사용할 수 있도록


자, StringChar의 순서는 다음과 같습니다. – Karolis

+0

이 프로그램을 코딩 할 수 있도록 일부 알고리즘 만 제공하십시오. –

+1

이 문제를 해결하기 위해 문자열 작성기를 사용해야합니까? –

답변

0

가능한 해결책은 캐릭터 문자열을 배열로 변환하고 그 배열을 반복하는 것이다.

배열의 각 요소에 대해 값을 1 씩 증가시키고 문자 유형으로 다시 캐스트합니다. (기본적으로 이것은 char와 int가 ASCII 테이블에 따라 값 제한이있는 char에 대해 동일하고 컴퓨터가 char에 이미지를 연관시킬 수 있기 때문에 효과가 있습니다)

이 질문에 대한 답변으로 바란다.

+0

ASCII 코드로 변환하지 않고도 가능합니까? –

+0

무엇을 변환합니까? – ItamarG3

+0

문자를 ASCII 코드로 변환하여 증분을 수행 할 수 있습니다. –

1

하나 쉽게 이해할 방법은 그것을 할 수 있습니다 : .NET에서

byte[] bytes = System.Text.Encoding.ASCII.GetBytes("abcd".ToCharArray()); 

for (int i = 0; i <= bytes.GetUpperBound(0); i++) 
{ 
    bytes[i]++; 
} 

Console.WriteLine(System.Text.Encoding.ASCII.GetString(bytes)); 
2

문자열은 UTF-16 코드 단위의 순서이다. Java, JavaScript, HTML, XML, XSL, Windows API 등의 경우에도 마찬가지입니다. 문자열의 .NET 데이터 유형은 String이고 UTF-16 코드 단위의 .NET 데이터 유형은 Char입니다. C#에서는 키워드 별칭 stringchar을 사용할 수 있습니다.

UTF-16은 유니 코드 문자 집합의 여러 인코딩 중 하나입니다. 하나 또는 두 개의 코드 단위로 각 유니 코드 코드 포인트를 인코딩합니다. 두 개의 코드 단위가 사용될 때 그들은 서로 게이트 쌍 (surrogate pairs)으로 불리며, 높은 surrogate 순서로 낮은 surrogate 순서로 호출됩니다.

ASCII는 유니 코드의 하위 집합입니다. ASCII와 공통된 유니 코드 문자는 정확히 U + 0000에서 U + 007F입니다. UTF-16은 '\ u0000'에서 '\ u007F'까지 각각 하나의 코드 단위로 인코딩합니다. ASCII 문자 세트에 대한 단일 인코딩은 각 바이트를 0x00에서 0x7f로 인코딩합니다.


문제 문은 "문자열", "알파벳", "ASCII", "C#"및 "콘솔"을 참조합니다. 이들 각각을 이해해야합니다.

불행히도 "ASCII"를 "문자 코드"로 사용하는 사람들이 있습니다. "C#" "string"의 문맥에서, 문자 코드는 유니 코드 코드 포인트 또는 UTF-16 코드 유닛을 의미합니다. 입력 문자가 UTF-16 서로 게이트 쌍을 필요로하지 않으며 그 범위가 U + 0000에서 U + 007F라는 단순화 가정을 할 수 있습니다.

"알파벳"은 수학적 용어와 언어 학적 용어입니다. 수학 (및 컴퓨터 과학)에서 "알파벳"은 흔히 주문이 주어지는 토큰의 집합입니다. 언어학에서 "알파벳"은 특정 언어에 대한 작문 시스템에서 사용되는 기본 문자의 순서입니다. 종종 "언어 아카데미"에 의해 정의되며 언어에 사용 된 모든 형태의 글자를 포함 할 수도 있고 포함하지 않을 수도 있습니다. 예를 들어, 허용 된 영어 알파벳에는 영어 단어로 사용 되더라도 발음 구별 부호 나 악센트 또는 합자가 포함 된 문자는 포함되지 않습니다. 또한, 서체 시스템에서 일부 또는 모든 문자는 대문자, 소문자, 대소 문자 또는 다른 형식을 가질 수 있습니다. 이 문제의 경우, ASCII가 언급되고 Basic Latin 문자가 대문자와 소문자로 포함 된 ASCII를 사용하여 UTF-16 코드 단위 값으로 정렬 된 두 개의 기술적 알파벳 A-Z와 a-z를 정의 할 수 있습니다.

알파벳의 각 문자에 대한 문자 코드를 증가 시키려면 결과가 더 이상 알파벳이 아닌 경우 어떻게되는지 결정해야합니다.마지막으로 가능한 문자 (또는 별개의 UTF-16 코드 단위 범위에 대해 많은 문자)가 있기 때문에 실제로 결과가 문자입니까? 당신은 당신의 알파벳의 첫 번째 문자로 감싸는 것을 고려할 것입니다. Z-> A, z-> a.

마지막 것은 "콘솔"입니다. 콘솔에는 문자 인코딩 설정이 있습니다. (귀하의 정보를 찾으려면 chcp으로 가십시오.) 프로그램은 콘솔에서 읽고 쓰게됩니다. 글을 쓰면 글꼴을 사용하여받은 문자의 이미지를 생성합니다. 모든 것이 정렬되면 멋지다. 그렇지 않은 경우 질문을 할 수 있습니다. 결론 : 프로그램이 읽고 쓸 때 입/출력 함수가 인코딩 변환을 수행합니다. 따라서 프로그램 내에서 StringChar의 인코딩은 UTF-16입니다.

foreach (Char c in inputString) 
{ 
    if (Char.IsSurrogate(c)) throw new ArgumentOutOfRangeException(); 
    if (c > '\u007f') throw new ArgumentOutOfRangeException(); 

    // add your logic to increment c and save or output it 
} 
+1

그것은 문제의 각 측면을 바라 보는 매우 훌륭하고 완전한 대답입니다. 나는 이것이 아마 숙제와 관련된 질문에서 약간 낭비 될까봐 두려워하지만. 여전히 우연히 여기 오는 사람들에게 매우 유용 할 수 있습니다. 그래서 저는 Joel Spolsky의 유니 코드 및 문자 세트에 대한 훌륭한 소개를 던지고 싶습니다. http://www.joelonsoftware.com/articles/Unicode.html –

+1

@ BernhardKönig 귀하의 의견. Joel의 기사는 재미 있지만 새로운 프로그래머가 연구중인 IETF RFC에 의해 호출 될 때만 유니 코드 BMP UTF-16과 ASCII를 처음 배울 경우 어떤 일이 일어날 지 궁금합니다. 현대 프로그래밍 언어 나 운영 체제에서는 MS-DOS가 아닌 ASCII 문자 세트 자체를 사용하지 않습니다. –

+0

아주 좋은 설명입니다. 정말 감사합니다. –