【问题标题】:Is there an equivalent to the "in" keyword in python for C是否有等效于 C 的 python 中的“in”关键字
【发布时间】:2019-11-09 01:54:10
【问题描述】:

我正在尝试检查某个关键字是否在用户输入的字符串中。

这就是我在 python 中的做法。

keyword = "something"
user_input = input("Enter a something: ")
if keyword in user_input: # I don't know how to do this part
    print("You entered something")
else:
    print("You didn't enter something")

我如何在 C 中做类似的事情?

【问题讨论】:

  • 不,C 中没有in 的直接替代方案,也不存在。 Python 的in(与所有其他运算符一样)是对象模型的扩展:它通过虚拟机指令触发obj.__contains__。换句话说,它是一个多态运算符。 C 没有对象,并且通过扩展,也没有太多可控的多态性。但是,这并不能阻止您编写实现 in 类似包含测试的类型专用函数。事实上,标准库提供了strstr

标签: c python-3.x string substring


【解决方案1】:

不完全一样,但我能想到的最接近的是strstr()

#include <string.h>
char *strstr(const char *haystack, const char *needle);

strstr() 函数在字符串 haystack 中查找子字符串 needle 的第一次出现。

此函数返回指向子字符串开头的指针,如果未找到子字符串,则返回 NULL

【讨论】:

    【解决方案2】:

    您可以使用strstr() 在字符串中搜索子字符串。它不像 Python 的 in 运算符那样通用(例如,strstr 不能用于检查给定值是否存储在数组中),但它会解决您提出的问题。

    例如(未经测试):

    const char *keyword = "something";
    const char *user_input = input("Enter a something: "); // I'll leave this to you to implement
    if (NULL != strstr(user_input, keyword)) {
        printf("You entered something\n");
    } else {
        printf("You didn't enter something\n");
    }
    

    【讨论】:

    • strstr 不能用于检查给定值是否存储在数组中”是什么意思?你的意思是它不适用于 int 数组之类的?
    • 正确。 strstr 在字符串中搜索子字符串。如果您想在数组中搜索特定值,最好的办法是使用 qsort 和您自己编写的二进制搜索,或者编写自己的搜索循环(取决于您的使用场景)。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多