将指定字符串后面的'0'字符截去[原创]

博客展示了一个名为TForm1.RTrimZero的函数,作者为Kevin,日期是2004.12.22。该函数接收一个字符串参数,功能是将指定字符串后面的0字符截去,并返回处理后的字符串,给出了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

{-------------------------------------------------------------------------------
  过程名:    TForm1.RTrimZero
  作者:      Kevin
  日期:      2004.12.22
  参数:      const AValue: string
  返回值:    string
  功能:      将指定字符串后面的0字符截去
-------------------------------------------------------------------------------}
function TForm1.RTrimZero(const AValue: string): string;
var
  nLen : Integer;
  i    : Integer;
  strTemp: string;
begin
  if (AValue = '') then Result := '';
  nLen := Length(AValue);
  strTemp := AValue;
  for i:= nLen downto 1 do
  begin
    if (AValue[i] = '0') then
      strTemp[i] := ' '
    else
      Break;
  end;
  Result := strTemp;
end;
这段代码实现的是从链表中删除指定名称的教师节点的功能。函数接收一个指向链表头节点的指针`ptea`,然后通过输入教师名称查找并删除该节点。以下是详细分析和解释: --- ### ✅ 函数功能说明: 该函数的功能是从一个单向链表中删除指定名称的教师节点,主要步骤包括: 1. 接收用户输入的教师名称; 2. 遍历链表查找匹配的节点; 3. 如果找到,则删除该节点并释放内存; 4. 如果未找到,输出提示信息并返回失败。 --- ### ✅ 代码逐行解析: ```c int delete_teacher(Tea* ptea) { printf("请输入您要删除的教师名称\n"); char str[10]; scanf("%s", str); while (getchar()!= '\n'); // 清除输入缓冲区中的多余字符 Tea* ptea_del = ptea->next; // 从第一个有效节点开始查找 while (ptea_del != NULL) { // 遍历链表 if (strcmp(ptea_del->name, str) == 0) { // 找到匹配的教师名称 printf("%s教师已删除\n", ptea_del->name); printf("*******************************************************\n\n"); ptea->next = ptea_del->next; // 修改前驱节点的next指针,跳过当前节点 free(ptea_del); // 释放被删除节点的内存 ptea_del = NULL; // 避免野指针 return 0; // 删除成功,返回0 } else { ptea = ptea->next; // 继续向后查找 ptea_del = ptea_del->next; } } printf("查无此人\n"); // 遍历结束未找到目标 printf("*******************************************************\n\n"); return -1; // 删除失败,返回-1 } ``` --- ### ⚠️ 注意事项和潜在问题: 1. **链表为空的情况**:如果链表为空(即 `ptea->next == NULL`),函数会直接输出“查无此人”,这是合理的处理。 2. **只删除第一个匹配项**:该函数只会删除第一个与输入名称匹配的节点,如果有重名教师,后面的不会处理。 3. **安全性问题**: - `scanf("%s", str);` 没有做长度限制,可能会导致缓冲区溢出。应使用 `scanf("%9s", str);` 限制输入长度。 - `str` 数组大小为10,意味着最多只能存储9个字符的名称,容易造成截断或溢出。 4. **字符串比较**:使用 `strcmp` 是正确的做法,但必须确保 `ptea_del->name` 是以 `\0` 结尾的字符串。 --- ### ✅ 示例结构体定义(补充): ```c typedef struct Date { int x; // 年 int y; // 月 int z; // 日 } Date; typedef struct Tea { char name[50]; // 姓名 char passwd[50]; // 密码 int num; // 工号 char sexy[10]; // 性别 Date date; // 出生日期 struct Tea* next; // 指向下一个节点的指针 } Tea; ``` --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值