小编msw*_*msw的帖子

在C/C++中进行不区分大小写的子字符串搜索的最快方法?

注意

下面的问题在2008年被问及2003年的一些代码.正如OP的更新显示的那样,整个帖子已经被2008年的老式算法淘汰,并且仅作为历史好奇而存在.


我需要在C/C++中进行快速不区分大小写的子字符串搜索.我的要求如下:

  • 应该表现得像strstr()(即返回指向匹配点的指针).
  • 必须不区分大小写(doh).
  • 必须支持当前的区域设置.
  • 必须在Windows上可用(MSVC++ 8.0)或轻松移植到Windows(即从开源库).

这是我正在使用的当前实现(取自GNU C库):

/* Return the offset of one string within another.
   Copyright (C) 1994,1996,1997,1998,1999,2000 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later …
Run Code Online (Sandbox Code Playgroud)

c c++ string optimization glibc

9
推荐指数
2
解决办法
3万
查看次数

解析srt字幕

我想解析srt字幕:

    1
    00:00:12,815 --> 00:00:14,509
    Chlapi, jak to jde s
    t?ma pracovníma sv?tlama?.

    2
    00:00:14,815 --> 00:00:16,498
    Trochu je zesilujeme.

    3
    00:00:16,934 --> 00:00:17,814
    Jo, sleduj.
Run Code Online (Sandbox Code Playgroud)

每个项目都进入结构.有了这个正则表达式:

A:

RE_ITEM = re.compile(r'(?P<index>\d+).'
    r'(?P<start>\d{2}:\d{2}:\d{2},\d{3}) --> '
    r'(?P<end>\d{2}:\d{2}:\d{2},\d{3}).'
    r'(?P<text>.*?)', re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

B:

RE_ITEM = re.compile(r'(?P<index>\d+).'
    r'(?P<start>\d{2}:\d{2}:\d{2},\d{3}) --> '
    r'(?P<end>\d{2}:\d{2}:\d{2},\d{3}).'
    r'(?P<text>.*)', re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

这段代码:

    for i in Subtitles.RE_ITEM.finditer(text):
    result.append((i.group('index'), i.group('start'), 
             i.group('end'), i.group('text')))
Run Code Online (Sandbox Code Playgroud)

使用代码BI只有一个项目在数组中(因为贪婪.*)和代码AI有空的'文本',因为没有贪心.*?

怎么治这个?

谢谢

python regex

7
推荐指数
3
解决办法
1万
查看次数

在Google App Engine下从数据库动态加载Python应用程序代码

我需要将python代码存储在数据库中并将其加载到某种bootstrap.py应用程序中以便执行.我不能使用文件系统,因为我正在使用GAE,所以这是我唯一的选择.

但是我不是经验丰富的python用户.

我已经能够加载1行代码并使用eval运行它,但是一行代码有两行或更多行给了我"语法无效"错误.

我也在考虑是否可以扩展"import"加载器来实现数据库加载.

谢谢!

python google-app-engine google-cloud-datastore

7
推荐指数
1
解决办法
4351
查看次数

什么用于Python string.find?

文档的Python 2.7列表string.find作为已弃用的功能,但不(不像atoiatol)提供一种替代.

我现在在2.7编码,所以我很乐意使用它,但我想知道:

  • 什么会被取代?
  • 可以在2.7中使用(如果是这样,我现在会使用它以避免以后重新编码)?

python string find deprecated

7
推荐指数
2
解决办法
9840
查看次数

使用python在两个字符串之间调整1个空格

我有两个字符串:

>>> a = "abcd"
>>> b = "xyz"
>>> c = a + b
>>> c
abcdxyz
Run Code Online (Sandbox Code Playgroud)

abcd xyz在添加时a,我怎样才能得到结果b呢?

python

7
推荐指数
2
解决办法
3万
查看次数

如何确定文件是否在Python中是远程的

我想确定文件是否位于本地硬盘驱动器或OSX中从网络安装的驱动器上.所以我想要生成类似下面的代码:

file_name = '/Somewhere/foo.bar'
if is_local_file(file_name):
    do_local_thing()
else:
    do_remote_thing()
Run Code Online (Sandbox Code Playgroud)

我找不到像is_local_file()上面例子那样有效的东西.理想情况下,我想使用现有的功能,如果有一个功能,但是我怎么能自己实现呢?我提出的最好的是以下,但这对待已安装的dmgs就好像它们是远程的,这不是我想要的.另外我怀疑我可能正在重新发明轮子!

def is_local_file(path):
    path = path.split('/')[1:]
    for index in range(1,len(path)+1):
        if os.path.ismount('/' + '/'.join(path[:index])):
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

我有两个生成校验和的函数,其中一个使用多进程,这会产生开销,但如果网络连接速度慢,则对于大文件更快.

python

7
推荐指数
1
解决办法
1508
查看次数

如何从两个并行字符串创建字典?

我有两个文本文件,格式如下:

foo,bar,etc
Run Code Online (Sandbox Code Playgroud)

另一个是这样的:

1,2,3
Run Code Online (Sandbox Code Playgroud)

我想把这两个文本文件放到Python的一个字典中,而不必手动完成每一个.我希望输出将字符串连接到数字.有没有办法做到这一点?

python dictionary

7
推荐指数
2
解决办法
4695
查看次数

用Perl逼近pi - 我做错了什么?

我试图使用Ramanujan算法近似pi :

pi的近似值

它应该计算总和,直到最后一个总和小于1e-15.

这应该只是为了好玩而占用我最多半小时的时间......但我的代码并没有产生任何接近pi的东西,我不知道为什么.很可能是我忽略的傻事,但不确定!

只是一个注释:我从$k1 开始,因为0打破了我的factorialsub,从我的计算中k = 0无论如何都会返回0.

我意识到代码可以更有效地编写; 我尽可能简单地写出来,看看能不能理解我哪里出错了.任何帮助赞赏!

#!/usr/bin/perl
use warnings;
use strict;

sub approx_pi {
    my $const = (2 * sqrt(2)) / 9801;

    my $k = 1;
    my $sum = 0;
    while ($sum < 1e-15) {
        my $p1 = factorial((4 * $k), 1);
        my $p2 = 1103 + (26390 * $k);
        my $p3 = (factorial($k, 1))**4;
        my $p4 = 396**(4 * $k);

        $sum = $sum + ( ($p1 * …
Run Code Online (Sandbox Code Playgroud)

math perl logic

7
推荐指数
1
解决办法
364
查看次数

如何在没有空闲的情况下安装python?

我正在使用Archlinux,我发现在编写Python时我不需要空闲.

以下是默认PKGBUILD文件的一部分:

    ./configure --prefix=/usr \
                --enable-shared \
                --with-threads \
                --with-computed-gotos \
                --enable-ipv6 \
                --with-valgrind \
                --with-system-expat \
                --with-dbmliborder=gdbm:ndbm \
                --with-system-ffi

     ln -sf idle3     "${pkgdir}"/usr/bin/idle
Run Code Online (Sandbox Code Playgroud)

我可以在不安装Idle的情况下构建python吗?
提前致谢.

python python-idle python-3.x

7
推荐指数
1
解决办法
1277
查看次数

从缓冲区中删除第n位,然后移动其余位

给出一个长度uint8_t缓冲区x,我试图找到一个函数或一个可以删除第n位(或n到n + i)的宏,然后左移剩余的位.

示例#1:

输入0b76543210 0b76543210 ...然后输出应该是0b76543217 0b654321 ...

示例#2:如果输入是:

uint8_t input[8] = {
    0b00110011,
    0b00110011,
    ...
};
Run Code Online (Sandbox Code Playgroud)

没有第一位的输出应该是

uint8_t output[8] = {
    0b00110010,
    0b01100100,
    ...
};
Run Code Online (Sandbox Code Playgroud)

我已尝试以下方法删除第一位,但它不适用于第二组位.

/* A macro to extract (a-b) range of bits without shifting */
#define BIT_RANGE(N,x,y) ((N) & ((0xff >> (7 - (y) + (x))) << ((x))))
void removeBit0(uint8_t *n) {
    for (int i=0; i < 7; i++) {
        n[i] = (BIT_RANGE(n[i], i + 1, 7)) << …
Run Code Online (Sandbox Code Playgroud)

c c++ bit-manipulation

7
推荐指数
1
解决办法
952
查看次数