2016-04-08 9 views
-1

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

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

int main (void) 
{ 
    char str[] = "david house n966898"; 

    char f_name[6], l_name[6], st_id[8]; 

    strcpy(f_name, strtok(str, " ")); 
    strcpy(l_name, strtok(NULL, " ")); 
    strcpy(st_id, strtok(NULL, " ")); 

    printf("First Name: %s\n", f_name); 
    printf("Last Name: %s\n", l_name); 
    printf("Student ID: %s\n", st_id); 


    return 0; 

} 

Пожалуйста, помогите!

+1

Идентификатор студента: для строки или символа в целое число вы можете использовать функцию atoi(). –

+0

ok, я видел этот atoi() раньше, но не был уверен, что это значит –

+1

'atoi (" n966898 ")' будет 0, поэтому вам придется обойти это. –

ответ

3

Доступ к первой букве выполняется с помощью массива-оператора []. Преобразование в верхний регистр выполняется с помощью функции ANSI-C toupper().

f_name[0] = toupper(f_name[0]); 

Распечатка того, что является номером, выполняется с помощью заполнителя% d. Преобразование строки в число выполняется с помощью функции ANSI-C atoi().

printf("Id: %d\n", atoi(st_id)); 

Вы должны прочитать https://en.wikipedia.org/wiki/The_C_Programming_Language, чтобы получить лучшее представление о С.

+0

Разработайте и объясните свой ответ для лучшего понимания. –

+0

В этом случае, возможно, нет необходимости преобразовывать числовую часть строки в число. Просто печатать эту часть строки, кажется, достаточно. – Lundin

2
$ apropos upper 
toupper (3)   - convert letter to upper or lower case 
toupper (3p)   - transliterate lowercase characters to uppercase 
towlower (3p)  - transliterate uppercase wide-character code to lowercase 
towupper (3)   - convert a wide character to uppercase 
towupper (3p)  - transliterate lowercase wide-character code to uppercase 
$ man toupper 
NAME 
     toupper, tolower - convert letter to upper or lower case 

SYNOPSIS 
     #include <ctype.h> 

     int toupper(int c); 
     int tolower(int c); 

DESCRIPTION 
     toupper() converts the letter c to upper case, if possible. 

     tolower() converts the letter c to lower case, if possible. 

     If c is not an unsigned char value, or EOF, the behavior 
     of these functions is undefined. 
4

Вы можете вызвать toupper(int) капитализировать один символ; и вы можете использовать atoi(const char *) для анализа идентификатора студента. Что-то вроде

printf("First Name: %c%s\n", toupper(f_name[0]), f_name + 1); 
printf("Last Name: %c%s\n", toupper(l_name[0]), l_name + 1); 
printf("Student ID: %i\n", atoi(st_id + 1)); 

выходов (без других изменений)

First Name: David 
Last Name: House 
Student ID: 966898 
+0

По какой-то причине он ничего не печатает с именем f_name, l_name и т. Д. –

+0

Замените их 'printf (s) этими; вы внесли какие-либо другие изменения? Потому что я запустил это. –

+0

Я испортил заказ. Оно работает!! Благодаря!! –

0

В некоторых ситуациях в помогает понять традиционный ASCII:

‘A’ = 0x41 = 0100 0001B 

‘a’ = 0x61 = 0110 0001B 

Lower to upper: c & 1101 1111 
Upper to lower: c | 0010 0000 

Преобразование между верхним и нижним символом в ASCII является вопрос маскировки одного бита. Когда это первый символ массива символов, просто разыщите указатель на массив и замаскируйте его.

*c & 0xDF; // to upper - some may consider bad form! 

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

Также обратите внимание, что нижние пять бит для верхнего или нижнего регистра начинают отсчет алфавита в 1, что дает некоторые сведения о других быстрых и простых преобразованиях между числами и алфавитом.