如何使用c将字符串中的第一个字母大写?

时间:2016-04-08 12:56:19

标签: c

我的项目是用小写字母创建我的名字,姓氏和学生ID的源字符串,并将它们分开打印出来,我名字的第一个字母将大写。我查看了许多示例代码,但无法弄清楚这一点。此外,我的学生ID应该打印为数字而不是字符串。不确定这甚至意味着什么。以下是我到目前为止的情况:

#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;

}

请帮助!

4 个答案:

答案 0 :(得分:4)

您可以致电toupper(int)以使一个字符大写;并且您可以使用atoi(const char *)来解析学生ID。像

这样的东西
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

答案 1 :(得分:3)

使用array-operator []访问第一个字母。 使用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以更好地了解C。

答案 2 :(得分:3)

$ 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.

答案 3 :(得分: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,这样就可以了解数字和字母之间其他快速简便的转换。