【问题标题】:Comparing elements of char* [closed]比较 char* 的元素 [关闭]
【发布时间】:2021-12-24 12:59:43
【问题描述】:

编辑:它的工作原理我只是在 '/0' 之前有带有 '/n' 的字符串

您好,我是 C 编程新手,有一个问题: 为什么这不能为在第一个和最后一个位置具有相同字符的字符串获取返回值 1:

function1(char* str){
   if(str[0]==str[strlen(str)-1]){
       return 1;
    }
    return 0;
   }

编辑:在我的情况下,解决方案是在我的字符串中 \0 之前有一个不可见元素,因此最后一个可视字符具有索引 strlen(str)-2。

【问题讨论】:

  • random_noob,如果 str""。你对str[0]==str[strlen(str)-1] 有什么期望?
  • 除了极端情况,让它返回一个int?在我看来像it works
  • @chux-ReinstateMonica 我希望用 str[0] 获得字符串的第一个字符,用 str[strlen(str)-1] 获得最后一个字符。这是错的吗?我试过了,它似乎工作。例如,对于 abca,我得到 a 和 a。但是似乎 a != a...
  • random_noob,字符串 ""最后一个字符是什么?
  • @yano 好的,现在我真的很困惑,我会仔细检查为什么它在我的代码中不起作用。

标签: c pointers


【解决方案1】:

This 工作:

#include <stdio.h>
#include <string.h>

int function1(char* str)
{
    if(!(strlen(str) == 0))
    {
        if(str[0] == str[strlen(str)-1])
            return 1;
        return 0;
    }
    return 0;
}
   
int main()
{
    printf("I am same: %i\n", function1("HaH"));
    printf("I am not same: %i\n", function1("HaR"));
    return 0;
}
  • 您的函数缺少返回类型 :) 编辑:另外,您应该注意str 是否为空。

【讨论】:

  • str[strlen(str)-1]*s == 0 时肯定是未定义的行为
  • if(!strlen(str) == 0) - 太复杂了。
  • 好的,!strlen(str) == 0 似乎是一种测试*str == 0 的昂贵方法,但 UV 可以改进。
猜你喜欢
  • 2022-12-17
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多