Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [С++] ASCII коды


Автор: RDN 20.12.2006, 19:25
помогите пожалуйста написать програмку smile 
которая работает так:
Вводишь в консоли строку из пяти строчных латинских символов, 
программа следующей строкой преобразовывает их в соответствующие прописные символы с помощью преобразование ASCII кодов ....
(все буквы в разных регистрах отличаются на пост. вел.);

Автор: Sartorius 20.12.2006, 19:29
Код

for (int i = 0; i < 5; i++)
{
  str[i] = str[i] - ('a' - 'A'); // ну или str[i] = toupper(str[i]);
}

Автор: RDN 20.12.2006, 20:00
а какие библиотеки использовать? 

Автор: Pete 20.12.2006, 20:35
Код

#include <ctype.h>

Автор: RDN 20.12.2006, 22:06
можете поподробнее написать пожалуйста smile
мне надо не с помощью символов а с помощью асц2 кодов
например 
A=a-32
B=b-32 и тд....
 (т.е.  в таблице кодов разница между прописными и строчными 32)
а вот как это написать я не знаю smile
п.с. напишите плиз полную прогу...

Автор: V.A.KeRneL 23.12.2006, 08:15
Код

#include <stdio.h>  /* for printf(), scanf(), getchar(), putchar() */
#include <ctype.h>  /* for toupper() */

#define MAX_STR_LEN   5  /* maximum length of your string */

/* 
   Main.
 */
int 
main(void)  /* does not use command line arguments */

    char buf[MAX_STR_LEN + 1];  /* 1 byte for a closing symbol '\0' */
    int i;                      /* counter, index */
    
    /* Program's invitation to enter input string.  */
    printf("Enter the string (maximum length %d)> ", MAX_STR_LEN);
    
    /*scanf("%s", buf);*/
    for (i = 0; i < MAX_STR_LEN; ++i) 
        buf[i] = getchar();  /* get i-th character of `buf' from `stdin' */
    
    buf[MAX_STR_LEN] = '\0';  /* end of C-string */
    
    /* In C 'A' is integer with value 65, 'b' == 66, 'c' == 67...
       'a' - 'A' = 97 - 65 = 32 */
    for (i = 0; i < MAX_STR_LEN; ++i) 
        buf[i] = buf[i] - ('a' - 'A');  /* ``'' */
    /* Or better: buf[i] = toupper(buf[i]); 
       It's safely for non-uppercase string too!  */
    
    /*printf("%s\n", buf);*/
    for (i = 0; i < MAX_STR_LEN; ++i) 
        putchar(buf[i]);  /* put i-th character of `buf' on `stdout' */
    
    return (0);  /* return 0 (successful) error code to the system */
}  /* main() */


RDN, достаточно подробно? smile

Да, кстати, З.Ы.: ASCII читается именно так, как и пишется, «аски», а не «асц2». Почему-то это распространённое заблуждение новичков...
Цитата из Википедии (http://ru.wikipedia.org/wiki/ASCII): 
«ASCII (англ. American Standard Code for Information Interchange — американский стандартный код для обмена информацией; по-английски произносится [`эски], по-русски произносится [`аски], и слово ASCII чаще употребляется в женском роде) — 7-битная компьютерная кодировка для представления латинского алфавита, десятичных цифр, некоторых знаков препинания, арифметических операций и управляющих символов. В честь кода ASCII даже был назван небольшой астероид — «3568 ASCII» (открыт в 1936 году, название получил позже).»

Автор: Pete 23.12.2006, 14:35
Цитата(V_A_KeRneL @  23.12.2006,  09:15 Найти цитируемый пост)
maximum length

(строка 4) Тогда уж просто length..

Добавлено @ 14:39 
Цитата(V_A_KeRneL @  23.12.2006,  09:15 Найти цитируемый пост)
buf[i] = buf[i] - ('a' - 'A');

Код

buf[i] -= 'a' - 'A';

 smile 

Автор: Rockie 23.12.2006, 15:30
Код
#include <stdio.h>

int main()
{
    char buff[80];

    printf("Enter string:\n");
    fgets( buff,sizeof(buff),stdin);

    for(int i=0;buff[i+1]!='\0';i++)
        putc((buff[i]-32),stdout);

    return 0;
}



Автор: V.A.KeRneL 25.12.2006, 11:28
Цитата(Pete @  23.12.2006, 14:35 Найти цитируемый пост)

Цитата(V_A_KeRneL @  23.12.2006,  09:15 Найти цитируемый пост)

maximum length

(строка 4) Тогда уж просто length..

Если именно с getchar(), то да, а если /*закомментированный*/ вариант с printf() и в общем виде, то я написал правильно и то, что хотел!

Цитата(Pete @  23.12.2006, 14:35 Найти цитируемый пост)

Добавлено @ 14:39 
Цитата(V_A_KeRneL @  23.12.2006,  09:15 Найти цитируемый пост)

buf[i] = buf[i] - ('a' - 'A');

Код

buf[i] -= 'a' - 'A';

 smile

Я, опять-таки, написал, что хотел! Это для того, чтобы было как можно меньше вопросов, в частности по использованным операторам!.. smile

Автор: Pete 25.12.2006, 22:30
Цитата(V_A_KeRneL @  25.12.2006,  12:28 Найти цитируемый пост)
я написал правильно и то, что хотел

Хмм... Там, ведь, по условию, ровно 5 символов. Или я что-то не понял?

Цитата(V_A_KeRneL @  25.12.2006,  12:28 Найти цитируемый пост)
чтобы было как можно меньше вопросов

А на что мы здесь сидим? Чтоб на них отвечать!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)