簡體   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