问题标签 [strncmp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
78 浏览

matlab - 删除元胞数组中带有字符的行

我需要一些基本的帮助。我有一个单元格数组:

  1. 标题 13122423
  2. 姓名鲍勃
  3. 提供者詹姆斯

还有更多带有文本的行...

  1. 234 456 234 345
  2. 324 346 234 345
  3. 344 454 462 435

还有更多(> 4000)只有数字

  1. 文本
  2. 文本

以及更多文本和混合条目

现在我想要的是删除第一列包含一个字符的所有行,最后只剩下那些包含数字的行。在此示例中为第 44 - 46 行。

我试着用

rawdataTruncated(strncmp(rawdataTruncated(:, 1), 'A', 1), :) = [];

但是我需要通过整个字母表,对吗?

0 投票
1 回答
303 浏览

c - 防止字符被写在c中的文件中

我正在尝试用c编写一个程序来写出一些字符串、单词、字符等......该程序的要点是允许写入所有内容,但是程序的前两个字节不能包含字符“ MZ”。我是 c 和指针的新手,这是我尝试过的:

方法1:这给了我编译错误....

这是我没有运气尝试过的另一件事(至少它遵守了哈哈哈):

*这里还要注意read_file_from是我教授给的方法,这里是参数:

unsigned long read_file_from(File file, void *data, unsigned long num_bytes, SeekAnchor start, long offset)

任何帮助将不胜感激,谢谢!

顺便说一句,Linux 用户不应该喝酒和 root!

0 投票
5 回答
8958 浏览

c - 在c中检查字符串的第一个字母

我正在用 C 编写一个非常简单的函数来检查字符串是绝对路径还是相对路径。无论我尝试什么,它总是返回错误。

这是我尝试过的:

我称之为:

每次都返回false。显然我遗漏了一些明显的东西,但我无法弄清楚......

0 投票
1 回答
65 浏览

c - c-strncmp 一段时间的“结束”不会终止循环

在这个关于共享内存(生产者/消费者)和信号量(在DEBIAN上)的程序中,当我使用带有字符串“end”的strncmp函数时,为了打开0一个标志(运行)来杀死一个while循环,strncmp没有'无法识别我插入外壳的单词 end。谢谢你。

这只是我想使用的第一个过程:

这是第二个过程:PRODUCER

0 投票
2 回答
107 浏览

c - strcmp 拒绝工作

我已经尝试了所有方法,但是 strcmp(以及 strncmp)总是给出 0 以外的值,无论是否使用指针,以及内部和外部函数。我应该怎么办?

该程序的重​​点是创建一个学生数据系统,用于注册和注册,以及管理和排序所述数据,后者我还没有实现。

我的输入示例如下:

注册 姓 名 4 5 6

然后:

注册姓氏 FN2 7 6 5

我希望看到“错误:找到姓氏”。就在起始消息的正上方。但是,它从未出现,表明 strcmp 失败。

0 投票
2 回答
6914 浏览

python - 为什么python中的字符串比较如此之快?

当我解决以下示例算法问题时,我很想了解字符串比较在 python 中的工作原理:

给定两个字符串,返回最长公共前缀的长度

解决方案 1:charByChar

我的直觉告诉我,最佳解决方案是从两个单词开头的一个光标开始,然后向前迭代,直到前缀不再匹配。就像是

为了简化代码,该函数假定第一个字符串的长度smaller始终小于或等于第二个字符串的长度bigger

解决方案 2:binarySearch

另一种方法是将两个字符串平分以创建两个前缀子字符串。如果前缀相等,我们知道公共前缀点至少和中点一样长。否则,公共前缀点至少不大于中点。然后我们可以递归找到前缀长度。

又称二分查找。

起初我认为这binarySearch会更慢,因为字符串比较会比较所有字符多次,而不是像charByChar.

令人惊讶的binarySearch是,经过一些初步的基准测试,结果证明速度要快得多。

图A

lcp_fixed_suffix

上面显示了随着前缀长度的增加,性能如何受到影响。后缀长度保持不变,为 50 个字符。

这张图显示了两件事:

  1. 正如预期的那样,随着前缀长度的增加,两种算法的线性表现都会变差。
  2. 性能以charByChar更快的速度下降。

为什么binarySearch好多了?我认为这是因为

  1. 中的字符串比较binarySearch大概是由幕后的解释器/CPU优化的。
  2. charByChar实际上为每个访问的字符创建新字符串,这会产生很大的开销。

为了验证这一点,我对比较和切片字符串的性能进行了基准测试,分别在下面标记cmp和标记。slice

图B

CMP

这张图显示了两个重要的事情:

  1. 正如预期的那样,比较和切片随长度线性增加。
  2. 相对于算法性能,比较和切片的成本随着长度的增长非常缓慢,图 A。请注意,这两个数字都上升到长度为 10 亿个字符的字符串。因此,比较 1 个字符 10 亿次的成本要比比较 10 亿个字符一次要大得多。但这仍然没有回答为什么......

蟒蛇

为了找出 cpython 解释器如何优化字符串比较,我为以下函数生成了字节码。

我浏览了 cpython 代码,发现了以下两段代码 但我不确定这是发生字符串比较的地方。

问题

  • 字符串比较在 cpython 中的哪个位置发生?
  • 有CPU优化吗?是否有特殊的 x86 指令可以进行字符串比较?如何查看 cpython 生成了哪些汇编指令?您可能会认为我使用的是最新的 python3、Intel Core i5、OS X 10.11.6。
  • 为什么比较长字符串比比较每个字符要快得多?

额外问题:charByChar 什么时候性能更高?

如果前缀与字符串的其余长度相比足够小,则在某些时候创建子字符串的成本charByChar会小于比较 in 的子字符串的成本binarySearch

为了描述这种关系,我深入研究了运行时分析。

运行时分析

为了简化下面的等式,我们假设smallerbigger大小相同,我将它们称为s1s2

逐字符

在哪里

cmp(1)比较两个长度为 1 字符的字符串的成本在哪里?

slice是访问 char 的成本,相当于charAt(i). Python 具有不可变的字符串,访问 char 实际上会创建一个长度为 1 的新字符串。这是将长度字符串切片为 sizeslice(string_len, slice_len)切片的成本。string_lenslice_len

所以

二进制搜索

log_2是将字符串分成两半直到达到长度为 1 的字符串的次数。

所以 big-O 的binarySearch会根据

根据我们之前对成本的分析

如果我们假设costOfHalfOfEachString大约是 ,costOfComparingOneChar那么我们可以将它们都称为x

如果我们把它们等同起来

所以O(charByChar(s1, s2)) > O(binarySearch(s1, s2)

因此,插入上面的公式,我为图 A 重新生成了测试,但字符串的总长度2 ** prefixLen预计两种算法的性能大致相等。

图像

但是,显然charByChar性能要好得多。通过一些试验和错误,两种算法的性能大致相等s1Len = 200 * prefixLen

图像

为什么关系是 200 倍?

0 投票
1 回答
124 浏览

c - 分段错误处理 strcmp

我有以下代码:

问题是“退出”部分运行良好。“获取”部分不起作用。例如,如果我输入:“get rekt.txt”。我得到以下输出:

000000000

111111111

分段错误(核心转储)

0 投票
1 回答
687 浏览

c - n 太大的 strncmp 会给出奇怪的输出

我有 2 个字符串要比较,我认为使用strncmp会比使用更好,strcmp因为我知道其中一个字符串的长度。

我希望输出是

因为仅在第 4 次迭代(i = 3)中,字符串开始有所不同,但我得到了

我不明白为什么,正如男人所说:

strcmp()函数比较两个字符串 s1 和 s2。如果发现 s1 分别小于、匹配或大于 s2,则它返回一个小于、等于或大于零的整数。

strncmp()函数类似,只是它只比较 s1 和 s2 的前(最多)n 个字节。

这意味着它应该在到达 a 后停止'\0',因此只返回 1 (如strcmp),不是吗?

0 投票
2 回答
695 浏览

c++ - 使用 strncmp 函数在 Arduino IDE 中出错

我正在使用以下代码比较两个字符串并得到错误:

据我了解,strncmp 函数正在寻找“const char*”,但是当我将“聊天”转换为“const char*”时,我在串行监视器中得到了奇怪的结果:

代码本身:

0 投票
3 回答
102 浏览

c - strncmp 在相等的字符串上不返回 0

如果输入结束,不应该strncmp("end",input,3) == 0返回 0 吗?但它返回一个 > 0 的数字。