c打印字符串语法

时间:2011-01-08 19:36:42

标签: c arrays string

坚持关于字符串的c语法。

假设我有一个类似(name[5]="peter";)的字符串,如果我只想打印字符串的最后一个字符或检查字符串的最后一个字符,在本例中为'r'我怎样才能做到这一点?

我的思维方式似乎不起作用

name[5]="peter";
if(name[5]=="r") printf("last character of name is r");

问题:是否有某种功能可以检查数组中的一个字符,是一个特定值,如名称[5]在字符串彼得中是'r'或同样名称[1]是'n'< / p>

另外,如何使用printf打印某些字符,使用

时出现问题
printf("last character of name is %s",name[5]) ???

由于

4 个答案:

答案 0 :(得分:4)

首先,字符串以空值终止。对于五个字符的字符串,您需要分配一个6个字符的数组来处理字符串末尾的'\0'字符。

char name[6] = "peter";
// peter is {'p', 'e', 't', 'e', 'r', '\0'}

要检查单个字符是什么,请使用方括号索引字符串。第一个字符是索引0,第二个字符是索引1等。另外,C区分字符串和单个字符。字符串使用"double quotes"编写。字符用单引号编写:'r'

if (name[4] == 'r') {
    printf("fifth character of name is r\n");
}

要查找最后一个字符,您需要知道字符串的长度。如果你提前知道它的长度,你可以硬编码;否则,使用strlen函数计算字符串长度。然后减去1,因为索引是从0开始的。

if (name[strlen(name) - 1] == 'r') {
    printf("last  character of name is r\n");
}

要使用printf打印单个字符,您可以使用%c格式说明符。 %c打印一个字符。

printf("fifth character of name is %c\n", name[4]);
printf("last  character of name is %c\n", name[strlen(name) - 1]);

答案 1 :(得分:1)

我想你想要这个:

char *s = "peter";
char lastChar = s[strlen(s) - 1];
printf("last character in s is %c\n", lastChar);

答案 2 :(得分:1)

你的问题是C中的字符串是以null结尾的。这意味着它们以'\0'字符结尾。你必须为此节省空间。此外,数组是从0索引的,因此name[5]指定一个包含4个字符和空字符的字符串,在name的索引4处使用空字符。

您需要解决这些问题:

char name[6]="peter";

所以现在:

name[0] = 'p'
name[1] = 'e'
...
name[4] = 'r'
name[5] = 0

因此,您的if语句应使用索引4,而不是5:

if(name[4]=="r") printf("last character of name is r");

最后,要打印单个字符,请使用%c修饰符,而不是%s。您的最终printf应为:

printf(“名称的最后一个字符是%c”,名称[4])

否则,您将从指定的偏移量打印开始的字符串,如果您在字符串中分配了足够的空间,则为'\0',这是一个空字符串。

答案 3 :(得分:0)

这里有两个大问题:

  • 首先是字符串
  • 长度
  • 其次是字符串的索引

长度

在C中,字符串以NULL结尾,这意味着它们在末尾有一个不可见的\0来标记字符串的结尾。你必须考虑这个隐形字符,所以虽然peter只有5个字母,你需要为Null-terminator多一个空格。

char name[6]="peter";  /* implied \0 at the end of the string */

索引

在C中,字符串和数组是0索引的,这意味着第一个元素是[0]。 对于字符串,索引为:

[0] `p`
[1] `e`
[2] `t`
[3] `e`
[4] `r`
[5] `\0`

因此,您希望r成为第5个字符,它的索引 4

如果正确声明字符串(使用6个元素而不是5个),并查看索引[4],您会发现r符合预期。