linux中,c语言字符串比较采用strcmp()函数
在linux命令行下,man strcmp,可以看到函数说明:
$ man strcmp...
NAME
strcmp, strncmp - compare two strings
SYNOPSIS
#include <string.h>
int strcmp(const char *s1, const char *s2)
DESCRIPTION
The strcmp() function compares the two strings s1 and s2. It returns an integer less than, equal to, or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.
strcmp函数比较两个字符串s1和s2. 函数返回小于0,等于0,或大于0的整数,分别对应s1<s2, s1=s2, s1<s2 .
比如 s1 = "good" s2="...this is good", 从s2取后四位进行两个字符串比较,代码如下:
#include <stdio.h>#include <string.h>
int main()
{
char *s1 = "good" , *s2="...this is good"
int len=strlen(s2)
if ( len >= 4 ) //如果串长超过4位,则移动指针到最后四位的位置
s2 =s2+len-4
printf("s2=%s\n", s2 ) //输出移位后的字符串内容
printf("compare s1,s2=%d\n", strcmp(s1,s2) ) //输出0,表示相同
return 0
}
个人认为,就是完全匹配与部分匹配的差别。grep
只要字符串中有部分能够与正则匹配即可,并且会输出匹配的一整行。帮助里这样讲:
grep
searches
the
named
input
FILEs
(or
standard
input)
for
lines
containing
(注意,是containing)
a
match
to
the
given
PATTERN.
By
default,
grep
prints
the
matching
lines.
如果你在终端里正确设置了颜色显示,那么可以看到:
echo
"abcde"
|
grep
"cde"
结果输出
abcde,其中cde是高亮红色显示的(只匹配了部分)。
echo
"abcde"
|
grep
".*cde"
结果也是输出
abcde,其中abcde全是高亮红色显示的。
这表示grep是部分匹配的,只要有部分字符串匹配就OK。
expr
STRING
:
REGEXP
则是完整匹配,输出最后匹配的那个位置(anchor)。帮助里这样说的:
STRING
:
REGEXP
anchored
pattern
match
of
REGEXP
in
STRING
规定了:后面必须跟正则表达式,用于格式匹配。
.*b
是正则表达式,可用于匹配任何以b结尾的字符串。
但“cde”如果被用作完全匹配的话,就是必须匹配以c开头的字符串,显然匹配不到,因为:前的字符串以a开头。^_^
如果改为
expr
"cdeab"
:
"cde"
,这样就可以匹配成功并且返回3。
看看源码应该能更清楚内部实现方式的区别。我没看过,因此也不好多说了。以上纯属个人看法,仅供探讨。
客户端连接Linux服务器中文显示乱码,如下图所示:
字符乱码问题 :如果服务器本身支持中文,只是客户端显示乱码,通常就是
客户端字符集与服务器字符集不一致造成的。把客户端字符集改成服务器字符集就可以解决的。但是像 SSHSecureShellClient-3.2.9.exe 客户端没有设置字符集的地方,就需要把字符集改为zh_CN.GB18030才能正确显示中文:
export LC_CTYPE=zh_CN.GB18030
export LC_ALL=zh_CN.GB18030
export LANG=zh_CN.GB18030
设置完就解决了客户端连接Linux系统中文显示乱码的问题。
注:每次使用客户端连接Linux服务器时,都需要手动改一下字符集。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)