【问题标题】:Check if string A occurs in the end of string B检查字符串 A 是否出现在字符串 B 的末尾
【发布时间】:2014-06-05 10:07:03
【问题描述】:

作为学习指针的练习的一部分,我尝试创建一个函数 这将查找字符串 t 是否在字符串 s 的末尾,并在 true 时返回 1,在 false 时返回 0。
但似乎即使条件正确,我也得到 0。

这是我的代码:

int strend(char *s, char *t)
{
    int flag = 0;
    if (!s || !t)
        return 0;
    while(*s)
    {
        if (*s==*t){
            s++;
            t++;
            flag = 1;
        }
        else{
            flag = 0;
            s++;
        }
    }
    if (!*t) return flag;
    else return 0;
}
int main()
{
    char first[15] = "first";
    char second[] ="t";
    printf("strend : %d", strend(first,second));
    return 0;
}

我看不出我在哪里搞砸了。

【问题讨论】:

  • 附带说明,不要这样称呼你的函数。以str 开头的函数名是保留的。
  • 为我返回 1(如预期)
  • 返回 1 给我作为您的输入。您可以将 while 循环更改为 while(*s && *t)
  • 适用于first/t (1)、first/st (1)、first/ts (0)。我没看到问题。
  • 在我退出并重新启动程序后,它现在似乎可以工作了。 Meby 它是一个陷阱或什么的......谢谢大家的时间:-)

标签: c string function


【解决方案1】:

我为您编写了一个快速函数,代码行数更少。这就是我的想法,如果你喜欢它,你可以使用它。我的目标是用尽可能少的代码做到这一点。实际上考虑这 1 行代码。

int strchk (char *str1, char *str2)
{
    if(!strcmp(&str1[strlen(str1) - strlen(str2)], str2)) return 1;
    return 0;
}

【讨论】:

  • 哇,这真是太好了。但是为什么是 &str1 而不是 *str1?
  • 因为*str1 没有意义。你看..& 表示“地址”,当打开索引运算符 [ 时,我从字符串的 nm 指向一块内存。
  • 好的,那么 strcmp 取地址 + 偏移量(str1-str2)并与 str 2 进行比较,如果比较则返回 0?然后你反转我,酷
  • 让我们得到以下字符串:char* str = "I love apples" &str[4] 将返回 "ve apples" ..我们在字符串中返回内存块 str[4],所以它有点.. 打破它.当我还在学习的时候,这是我理解它的最简单的方法。
  • 没问题@Or Halimi
猜你喜欢
  • 2014-11-22
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多