大家好!我正在尝试写一个程序,检查一个给定的文本字符串是否是回文(为此,我做了一个名为is_palindrome的函数),如果它的任何子字符串是回文,我不知道什么是最佳的方法来做到这一点:
例如,对于字符串s =“abcdefg”,它应该首先检查“a”,然后检查每个字符的“ab”、“abc”、“abcd”等等
In Python this is the equivalent of
s[:1], s[:2], ... (a, ab, ...)
s[1:2], s[1:3] ... (b, bc, ...)
有什么函数/方法可以在C中以类似的方式使用?
7条答案
按热度按时间vxf3dgd41#
这是我用来在C中获取字符串片段的一个行程序。
非常简单,因为你已经检查了边界并确保了end〉start。
ar5n3qh52#
这个
slice_str()
函数可以做到这一点,其中end
实际上是结束字符,而不是像Python切片中那样的结束符:当从上述
main()
函数使用时,其输出:vx6bjr1n3#
没有你得自己写
khbbv19g4#
为了检查字符串,您需要提供要检查的字符数,以便检查回文:
现在你需要为每个子字符串调用上面的函数(如你所描述的,即总是从头开始)。
免责声明:未编译。
zzzyeukh5#
老实说,你不需要一个字符串切片函数来检查子字符串中的回文:
这样,您可以创建以下内容:
当然,如果您真的希望字符串切片函数仅用于输出(因为从技术上讲,您不应该将
size_t
转换为int
),并且您仍然希望能够轻松地格式化输出,Paul Griffiths的答案应该足够了,或者您可以使用我的,甚至是strncpy
或非标准strlcpy
中的一个,尽管他们都有自己的优点和缺点:strslice
实际上类似于strncpy
和非标准strlcpy
的组合,尽管这三个函数之间存在差异:strlcpy
将缩短复制的字符串,以便在dest[n - 1]
处添加空终止符,因此在添加空终止符之前复制n
字节需要传递n + 1
作为缓冲区大小。strncpy
可能根本不会终止字符串,使dest[n - 1]
等于src[n - 1]
,因此您需要自己添加一个null终止符以防万一。如果n
大于src
字符串长度,则dest
将使用null终止符填充,直到n
字节被写入。strslice
将复制最多n
字节,如strncpy
,并且需要一个额外的字节用于空终止符,这意味着最多需要n+1
字节。它不会像strncpy
那样浪费时间编写不必要的空终止符。这可以被认为是“轻量级strlcpy
”n
的含义略有不同,可以用于结果字符串长度无关紧要的地方。如果需要,还可以创建一个
memslice
函数,这将允许嵌入空字节,但它已经作为memcpy
存在。k3fezbri6#
在任何标准的C库中都没有任何内置的函数/方法可以处理这个问题。但是,你可以想出自己的方法来做同样的事情。
ycggw6v27#
使用https://www.github.com/madhukumarseshadri/slice进行切片。你可以使用./slice madhukumar 0:5来得到madhu。