Questions tagged «strings»

“字符串”是通常代表人类可读文本单位的一系列字符。关于此主题的问题涉及程序中字符串的处理,以及各种语言和环境如何定义和操作字符串。


4
我们应该如何防御?
我们已经在一些代码上运行了Pex,并且一直在显示一些好东西(好东西,但是要在生产之前显示它们!)。 但是,Pex的优点之一是它不一定会停止尝试查找问题。 我们发现的一个方面是,在传递字符串时,我们没有检查空字符串。 所以我们改变了: if (inputString == null) 至 if (string.IsNullOrEmpty(inputString)) // *** 这解决了最初的问题。但是,当我们再次运行Pex时,它决定: inputString = "\0"; 造成了问题。然后 inputString = "\u0001"; 我们已经决定,如果遇到默认情况,可以使用默认值// ***,并且很高兴看到由任何其他奇数输入引起的异常(并对其进行处理)。 够了吗?

5
函数返回字符串,风格好吗?
在我的C程序中,我经常需要一种方法来对我的ADT进行字符串表示。即使我不需要以任何方式将字符串打印到屏幕上,使用这种调试方法也很简洁。因此,经常会出现这种功能。 char * mytype_to_string( const mytype_t *t ); 我实际上意识到我在这里有(至少)三个选项来处理返回字符串的内存。 备选方案1:将返回字符串存储在函数的静态char数组中。除了每次调用都会覆盖该字符串外,我不需要太多思考。在某些情况下这可能是个问题。 备选方案2:使用函数内部的malloc在堆上分配字符串。真的很整洁,因为我那时无需考虑缓冲区的大小或覆盖的问题。但是,我确实必须记得在完成操作后将字符串free(),然后还需要分配一个临时变量,以便可以释放。然后堆分配实际上比堆栈分配要慢得多,因此如果在循环中重复进行,则将成为瓶颈。 备选方案3:将指针传递到缓冲区,然后让调用方分配该缓冲区。喜欢: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); 这给呼叫者带来了更多的努力。我还注意到,该替代方案在参数顺序方面为我提供了另一个选择。我应该首先讨论哪个论点?(实际上有六种可能性) 那么,我该选择哪个呢?为什么?C开发人员中是否存在某种不成文的标准?

5
在C ++中优化冗余字符串分配
我有一个相当复杂的C ++组件,其性能已成为问题。分析表明,大多数执行时间只是花在为std::strings 分配内存上。 我知道这些字符串之间有很多冗余。少数值非常频繁地重复,但也有很多唯一值。字符串通常很短。 我现在只是在考虑以某种方式重用那些频繁的分配是否有意义。代替1000个指向1000个不同的“ foobar”值的指针,我可以有1000个指向一个“ foobar”值的指针。这样可以提高内存效率,这是一个不错的选择,但是我在这里最担心的是延迟。 我猜一个选择是维护某种已经分配了值的注册表,但是是否有可能使注册表查找比冗余内存分配更快?这是可行的方法吗?

5
将文本标记放在字符串中是否不好?有其他选择吗?
我使用大量字符串,需要大量操作。 例如,我可能会生成这样的字符串: 第1部分船 A节 编程 第2部分用于编程的分区船。 AA 节SQL条目。 该字符串太大,无法手动检查它的每个部分。现在,我需要split将此string分为stringlist几个部分。我可以想到两种选择: 正则表达式: QStringList sl = s.split(QRegularExpression("\n(?=Part [0-9]+|Section [A-Z]+)")); 看起来应该可以,但是有时会漏掉一些异常(即:Section SQL Entries错误地分裂) 否则,我可以做的就是在生成初始字符串时放置一个标记: 🚤💻Part1 船 AA节 编程 🚤💻第2部分用于编程的分区船。 A 第AA 节“ SQL条目”。 这意味着分割字符串将变得容易: QStringList sl = s.split("🚤💻")); 有人告诉我,这些都不是好的样式或编程实践,但是直到现在我还没有讨论它,也没有找到替代方法。 如果您是我的项目经理,您会接受这两种方法吗? 如果没有,您会建议我做为最佳做法吗?

1
匹配两个字符串,但允许一定程度的错误
如何匹配两个字符串,但同时允许X个字符在匹配中不正确。错误数量应该是一个可控制的变量。 虽然字符串中X个字符的数量不匹配,但是应该限制序列中有多少个字符。给定两个字符串,我可能允许5个字符不同,但不能连续超过2个。 我正在寻找一种推荐的算法来比较这两个字符串,或者也许已经有一个已知的解决方案。

3
字符串数,每个字符必须出现偶数次
我已经为此问题problem了一段时间,这真的开始让我感到沮丧。问题是: 我有一个字符集,A,B,C,和D。我必须说出从这些字符中构建字符串的方式,长度是多少n,每个字符必须出现偶数次。 例如,答案为n = 24: AA BB CC DD 答案n = 4是40。其中一些有效的字符串是: AAAA AABB CACA DAAD BCCB 我坚持提出一个逻辑。我觉得可能会有一个DP解决方案。解决这个问题的方法是蛮横的:解决方案的数量迅速增长到巨大数量。 我试图在纸上画出各种想法,但没有成功。我几乎不得不放弃所有这些想法,因为它们的复杂性太大。该解决方案应有效n = 10^4。 我的想法之一是永远不要跟踪实际的字符串,而只能跟踪每个字符出现的是偶数还是奇数次。我无法提出一种应用此逻辑的方法。 谁能帮我?

1
可以改善Damerau-Levenshtein吗?
我最近从Wikipedia上的伪代码实现了Damerau-Levenshtein距离算法。我找不到它是如何工作的任何解释和伪采用完全无信息变量的名称,如DA,DB,i1,和j1我留下抓我的头。 这是我在Python中的实现:https : //gist.github.com/badocelot/5327337 Python的实现帮助我遍历了程序并弄清了正在发生的事情,将变量重命名为更有用的名称。我很熟悉Wagner-Fischer的方法来计算Levenshtein距离,因此有了参考系。 冒着过长的风险,这就是我对Damerau-Levenshtein的理解: 神秘变量: DA(last_row在我的代码中)是一种地图,其中包含每个元素被查看到的最后一行;在我的代码中,这是一个实际的Python字典 DB(last_match_col)保留最后一列,其中输入的字母b与a当前行的输入字母匹配 i1(last_matching_row)是来自DA当前字母的行号b j1只是DB/ 值last_match_col可能被更新之前的副本;在我的代码中,我只是移动了last_match_col更新并消除了此变量的位置 换位成本: H[i1][j1] + (i-i1-1) + 1 + (j-j1-1) 正在计算将当前字符换成已知b的最后一个字符(最后一个匹配项)所花费的费用,将之间的所有字符都视为增加或删除。ba 成本要素: H[i1][j1] 将基本成本还原到转置之前的计算点,因为找到转置会使先前的工作无效 (i-i1-1) 是当前行与匹配当前字符的最后一行之间的距离,这是需要删除的数量 (j-j1-1) 是当前列与具有匹配项的最后一列之间的距离,即相加次数 多余+ 1的只是换位本身的成本 如果此分析不正确,我很想知道我哪里做错了。就像我说的那样,我找不到关于该算法如何在线工作的任何详细说明。 改进版? 已经想通了这一点,虽然,它让我吃惊的是,通过计算成本都增加和调换字母之间的缺失似乎有缺陷的:一个加法和一个删除相当于替代,这,这是不检查。 如果一切正确,那么解决方案应该是微不足道的:转置字母之间的字母成本应为添加和删​​除中的较高者:将尽可能多的字母转换为替换,并添加所有剩余的添加或删除。 因此成本为: H[i1][j1] + max((i-i1-1), (j-j1-1)) + 1 这是该版本的代码:https : //gist.github.com/badocelot/5327427 从一些简单的测试来看,这似乎是正确的。例如,“ abcdef”->“ abcfad”的编辑距离为2(转置“ d”和“ f”,将“ e”更改为“ …


7
带变量vs内联变量的string.format
有什么优点/缺点(如果有) string output; int i = 10; output = string.Format("the int is {0}", i); 与 string output; int i = 10; output = "the int is " + i; 我一直使用后一个示例,但似乎大多数在线教程都使用string.format示例。我认为效率没有真正的区别,我最初的想法是使编码人员不必为了插入变量而不断破坏字符串。
9 c#  .net  vb.net  strings 

1
基于字素的字符串类?
我想知道为什么我们没有一些代表Unicode字形簇的字符串而不是代码点或字符的字符串类。在我看来,在大多数应用程序中,程序员在需要时访问字形的组件比必须从代码点组织它们更容易,即使只是为了避免随意地破坏“中间字形”中的字符串,这似乎也是必要的(至少在理论上)。在内部,字符串类可能使用可变长度的编码,例如UTF-8,UTF-16,或者在这种情况下,甚至UTF-32都是可变长度的。或为所有这些子类实现子类(并可以选择在运行时配置选择,以便不同的语言可以使用它们的最佳编码)。但是,如果程序员在检查字符串时可以“看到”字素单元,就不会
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.