繁体   English   中英

查找没有C语言中函数的字符串的最后一个字符

[英]Finding last character of a string without a function in C


我想在不使用任何函数的情况下找到字符串的最后一个元素。
我的代码似乎可以工作,但是我不太确定为什么它会以这种方式工作,并且会为输入感到高兴。
这是代码。

#include <stdio.h>

char *find_last(char *s);

int main(void)
{
    char string[] = {"This is an Example"};
    find_last(string);
    return 0;
}

char *find_last(char *s)
{
/*  char last;*/
    while (*s++ != 0) {}
    printf("*s ist %c", *(s-2));
    return 0;
}

我不明白为什么我必须打印*(s-2)而不是*(s-1)才能获得最后一个字符。 (为了获得更多的字符,我只需要再减小一个,即*(s-3))。

哦,此外,看来* s的内容似乎是字母O(直到现在为止,我对它的理解是零),与测试的示例字符串无关。 这是为什么? 我认为它应该为零(0),因为我增加了指针直到它达到二进制零。

谢谢你的帮助!

由于++是后递增运算符,因此while循环中会发生以下情况:

  1. *s0比较。
  2. s增加。
  3. 如果比较成功,则循环退出。

s到达字符串的末尾时,它指向空字符。 它递增以指向null 的字符,然后循环退出。 在那时候:

*s =空值后的字符,在您的情况下恰好是字母O

*(s-1) =空字符。

*(s-2) =字符串中的最后一个字符。

OP随后询问有关处理涉及""的极端情况的问题。

首先建议明确目标“找到字符串的最后一个元素”。 根据定义:在C中,

字符串是由第一个空字符终止并包括第一个空字符的连续字符序列。 C11§7.1.11

由于字符串包含一个空字符且该字符最后一个,因此“查找字符串的最后一个字符” 始终空字符

当然,OP对空字符之前的最后一个字符感兴趣。 由于此类函数可能会收到有效的字符串 "" ,而无法找到此类字符,因此find_last()可能会以某种方式出错,或者可能返回错误条件(例如下面的NULL ,并让调用者决定。

从类似OP的代码开始

char *find_last(char *s) {
  printf("Last character before the null character in \"*s\"", s);
  if (*s == '\0') {
    printf(" does not exist.\n");
    return NULL;
  }
  while (*s) {
    s++;
  }
  s--;
  printf(" is '%c'\n", *s);
  return s;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM