随着计算机科学的发展和计算机应用的推广,对字符串的处理越来越成为计算机的一项重要能力。当然,在acm中也时常要用到。现在,我就来总结下在acm中必须掌握的字符串函数:
出现的顺序是按在acm中的使用频率来排的。
头文件:#include<string.h> / #include<cstring> ,分别为 C 和 C++中的头文件。
1.extern unsigned int strlen(char *s);
------>> 说明:
求字符串的长度,即字符串中字符的个数,不包括字符串标识符 ‘\0‘。
2. extern int strcmp(const char * s1, const char * s2);
----->> 说明:
字符串比较函数:const char *s1 , const char *s2 分别为需要比较的字符串。
当 s1 < s2 时,返回为负数
当 s1 = s2 时,返回 0
当 s1 > s2 时,返回正数
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇‘\0‘为止。
3. extern char *strcpy(char* dest, const char *src)
extern char *strncpy(char *dest, char *src, int maxlen);
------>> 说明:
两个都是字符串复制函数:前者是把从src地址开始且含有 ‘\0‘ 标志符的整个字符串复制到以dest开始的地址中,并且不管 dest 是否有足够的空间存下 src (容易造成缓冲区溢出)。而后者可以让你来从 src 中选一段字符内容复制到 dest 中,而且当dest存不下时,就会立即停止,所以相对前者安全。
4. extern char *strstr(char *s1, const char *s2);
------->> 说明:
若 s2 是 s1 的子串,则先确定 s2 在s1 的第一次出现的位置,并返回此位置到 s1 末尾的所有字符;如果 s2 不是 s1 的子串,则返回NULL。
(注:若想返回str2在str1第一次出现的位置,不是这个函数。仔细观察会发现它放回的 s2 第一次出现的 s2 首地址)
比如有如下代码:
char *s1="I Love You,Someboay"; cout << strstr(s1, "Some") << endl; 输出的是: "Somebody"
5. extern char *strrev(char *s);
------>> 说明:
字符串反转函数。把字符串 s 的所有字符的顺序颠倒过来(不包括空字符NULL)。
6. extern char *strcat(char *dest,char *src);
------>> 说明:
把两个不同的字符串连接为一个字符串,即把src所指字符串添加到dest结尾处(覆盖dest结尾处的‘\0‘)并添加‘\0‘。