问题标签 [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.
matlab - 删除元胞数组中带有字符的行
我需要一些基本的帮助。我有一个单元格数组:
- 标题 13122423
- 姓名鲍勃
- 提供者詹姆斯
还有更多带有文本的行...
- 234 456 234 345
- 324 346 234 345
- 344 454 462 435
还有更多(> 4000)只有数字
- 文本
- 文本
以及更多文本和混合条目
现在我想要的是删除第一列包含一个字符的所有行,最后只剩下那些包含数字的行。在此示例中为第 44 - 46 行。
我试着用
rawdataTruncated(strncmp(rawdataTruncated(:, 1), 'A', 1), :) = [];
但是我需要通过整个字母表,对吗?
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!
c - 在c中检查字符串的第一个字母
我正在用 C 编写一个非常简单的函数来检查字符串是绝对路径还是相对路径。无论我尝试什么,它总是返回错误。
这是我尝试过的:
我称之为:
每次都返回false。显然我遗漏了一些明显的东西,但我无法弄清楚......
c - c-strncmp 一段时间的“结束”不会终止循环
在这个关于共享内存(生产者/消费者)和信号量(在DEBIAN上)的程序中,当我使用带有字符串“end”的strncmp函数时,为了打开0一个标志(运行)来杀死一个while循环,strncmp没有'无法识别我插入外壳的单词 end。谢谢你。
这只是我想使用的第一个过程:
这是第二个过程:PRODUCER
c - strcmp 拒绝工作
我已经尝试了所有方法,但是 strcmp(以及 strncmp)总是给出 0 以外的值,无论是否使用指针,以及内部和外部函数。我应该怎么办?
该程序的重点是创建一个学生数据系统,用于注册和注册,以及管理和排序所述数据,后者我还没有实现。
我的输入示例如下:
注册 姓 名 4 5 6
然后:
注册姓氏 FN2 7 6 5
我希望看到“错误:找到姓氏”。就在起始消息的正上方。但是,它从未出现,表明 strcmp 失败。
python - 为什么python中的字符串比较如此之快?
当我解决以下示例算法问题时,我很想了解字符串比较在 python 中的工作原理:
给定两个字符串,返回最长公共前缀的长度
解决方案 1:charByChar
我的直觉告诉我,最佳解决方案是从两个单词开头的一个光标开始,然后向前迭代,直到前缀不再匹配。就像是
为了简化代码,该函数假定第一个字符串的长度smaller
始终小于或等于第二个字符串的长度bigger
。
解决方案 2:binarySearch
另一种方法是将两个字符串平分以创建两个前缀子字符串。如果前缀相等,我们知道公共前缀点至少和中点一样长。否则,公共前缀点至少不大于中点。然后我们可以递归找到前缀长度。
又称二分查找。
起初我认为这binarySearch
会更慢,因为字符串比较会比较所有字符多次,而不是像charByChar
.
令人惊讶的binarySearch
是,经过一些初步的基准测试,结果证明速度要快得多。
图A
上面显示了随着前缀长度的增加,性能如何受到影响。后缀长度保持不变,为 50 个字符。
这张图显示了两件事:
- 正如预期的那样,随着前缀长度的增加,两种算法的线性表现都会变差。
- 性能以
charByChar
更快的速度下降。
为什么binarySearch
好多了?我认为这是因为
- 中的字符串比较
binarySearch
大概是由幕后的解释器/CPU优化的。charByChar
实际上为每个访问的字符创建新字符串,这会产生很大的开销。
为了验证这一点,我对比较和切片字符串的性能进行了基准测试,分别在下面标记cmp
和标记。slice
图B
这张图显示了两个重要的事情:
- 正如预期的那样,比较和切片随长度线性增加。
- 相对于算法性能,比较和切片的成本随着长度的增长非常缓慢,图 A。请注意,这两个数字都上升到长度为 10 亿个字符的字符串。因此,比较 1 个字符 10 亿次的成本要比比较 10 亿个字符一次要大得多。但这仍然没有回答为什么......
蟒蛇
为了找出 cpython 解释器如何优化字符串比较,我为以下函数生成了字节码。
我浏览了 cpython 代码,发现了以下两段代码 ,但我不确定这是发生字符串比较的地方。
问题
- 字符串比较在 cpython 中的哪个位置发生?
- 有CPU优化吗?是否有特殊的 x86 指令可以进行字符串比较?如何查看 cpython 生成了哪些汇编指令?您可能会认为我使用的是最新的 python3、Intel Core i5、OS X 10.11.6。
- 为什么比较长字符串比比较每个字符要快得多?
额外问题:charByChar 什么时候性能更高?
如果前缀与字符串的其余长度相比足够小,则在某些时候创建子字符串的成本charByChar
会小于比较 in 的子字符串的成本binarySearch
。
为了描述这种关系,我深入研究了运行时分析。
运行时分析
为了简化下面的等式,我们假设smaller
和bigger
大小相同,我将它们称为s1
和s2
。
逐字符
在哪里
cmp(1)
比较两个长度为 1 字符的字符串的成本在哪里?
slice
是访问 char 的成本,相当于charAt(i)
. Python 具有不可变的字符串,访问 char 实际上会创建一个长度为 1 的新字符串。这是将长度字符串切片为 sizeslice(string_len, slice_len)
切片的成本。string_len
slice_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 倍?
c - 分段错误处理 strcmp
我有以下代码:
问题是“退出”部分运行良好。“获取”部分不起作用。例如,如果我输入:“get rekt.txt”。我得到以下输出:
000000000
111111111
分段错误(核心转储)
c - n 太大的 strncmp 会给出奇怪的输出
我有 2 个字符串要比较,我认为使用strncmp
会比使用更好,strcmp
因为我知道其中一个字符串的长度。
我希望输出是
因为仅在第 4 次迭代(i = 3
)中,字符串开始有所不同,但我得到了
我不明白为什么,正如男人所说:
该
strcmp()
函数比较两个字符串 s1 和 s2。如果发现 s1 分别小于、匹配或大于 s2,则它返回一个小于、等于或大于零的整数。
strncmp()
函数类似,只是它只比较 s1 和 s2 的前(最多)n 个字节。
这意味着它应该在到达 a 后停止'\0'
,因此只返回 1 (如strcmp
),不是吗?
c++ - 使用 strncmp 函数在 Arduino IDE 中出错
我正在使用以下代码比较两个字符串并得到错误:
据我了解,strncmp 函数正在寻找“const char*”,但是当我将“聊天”转换为“const char*”时,我在串行监视器中得到了奇怪的结果:
代码本身:
c - strncmp 在相等的字符串上不返回 0
如果输入结束,不应该strncmp("end",input,3) == 0
返回 0 吗?但它返回一个 > 0 的数字。