例353:字符串比较函数strncmp()
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
// int strncmp(const char *str1, const char *str2, size_t n)
// strncmp比较两个字符串的前n个字符
// 如果返回值 < 0,则表示 str1 小于 str2。
// 如果返回值 > 0,则表示 str2 小于 str1。
// 如果返回值 = 0,则表示 str1 等于 str2。
printf("Comparing 3 letters Abc with Abc %d\n", strncmp("Abc", "Abc", 3)); //Comparing 3 letters Abc with Abc 0
printf("Comparing 3 letters abc with Abc %d\n", strncmp("abc", "Abc", 3)); // Comparing 3 letters abc with Abc 1
printf("Comparing 3 letters abcd with abc %d\n", strncmp("abcd", "abc", 3));// Comparing 3 letters abcd with abc 0
printf("Comparing 5 letters Abc with Abcd %d\n", strncmp("Abc", "Abcd", 5));// Comparing 5 letters Abc with Abcd -1
return 0;
}
例354:自定义函数用来查找字符串中字符的位置
#include <stdio.h>
#include <string.h>
/**
* 返回字符串中指定字符的指针
*/
char *strrchr(const char *string, int letter)
{
char *ptr = NULL;
while (*string)
{
if (*string == letter)
ptr = string;
string++;
}
return(ptr);
}
int main(int argc, char const *argv[])
{
char title[64] = "1001 C/C++ Tips!";
char *ptr;
if (ptr = strrchr(title, 'C'))
printf("Rightmost occurrence of C is at offset %d\n", ptr - title);
else
printf("Character not found\n");
return 0;
}
例355:自定义函数用来反转字符串
#include <stdio.h>
/**
* 反转字符串, 返回字符串首地址
*/
char *strrev(char *string)
{
char *original = string;
char *forward = string;
char temp;
while (*string)
string++;
while (forward < string)
{
temp = *(--string);
*string = *forward;
*forward++ = temp;
}
return(original);
}
int main(int argc, char const *argv[])
{
// 想想这样调用能输出吗?
printf(strrev("A"));
printf("\n");
printf(strrev(""));
printf("\n");
printf(strrev("ABC"));
printf("\n");
printf(strrev("AABBCCDDEE"));
return 0;
}
例356:自定义函数用来查找字符串字符的下标(最后一次出现的)
#include <stdio.h>
/**
* 返回字符串中指定字符的下标
*/
int strr_index(char *string, int letter)
{
char *original = string;
char *ptr = NULL;
while (*string)
{
if (*string == letter)
ptr = string;
string++;
}
return((ptr) ? ptr-original : string-original);
}
int main(int argc, char const *argv[])
{
printf("Location of C is %d\n", strr_index("1001 C/C++", 'C'));
printf("Location of x is %d\n", strr_index("1001 C/C++", 'x'));
return 0;
}
例357:自定义函数全部用单个字符给字符串赋值
#include <stdio.h>
#include <string.h>
/**
* 将字符串用字符letter赋值
*/
char *strset(char *string, int letter)
{
char *original = string;
while (*string)
*string++ = letter;
return(original);
}
int main(int argc, char const *argv[])
{
char name[] = "22222";
printf(strset(name, '1'));
return 0;
}
例358:字符串查找下标函数strspn()
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
// size_t strspn(const char *str1, const char *str2)
// 检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标
printf("Searching for Abc in AbcDef %d\n", strspn("AbcDef", "Abc"));// Searching for Abc in AbcDef 3
printf("Searching for cbA in AbcDef %d\n", strspn("AbcDef", "cbA"));// Searching for cbA in AbcDef 3
printf("Searching for Def in AbcAbc %d\n", strspn("AbcAbc", "Def"));// Searching for Def in AbcAbc 0
return 0;
}
例359:查找子串函数strstr()
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
// char *strstr(const char *haystack, const char *needle)
// 在字符串haystack中查找第一次出现字符串needle的位置,不包含终止符'\0'
printf("Looking for Abc in AbcDef %s\n", (strstr("AbcDef", "Abc")) ? "Found" : "Not found");// Looking for Abc in AbcDef Found
printf("Looking for Abc in abcDef %s\n", (strstr("abcDef", "Abc")) ? "Found" : "Not found");// Looking for Abc in abcDef Not found
printf("Looking for Abc in AbcAbc %s\n", (strstr("AbcAbc", "Abc")) ? "Found" : "Not found");// Looking for Abc in AbcAbc Found
return 0;
}
例360:字符串转换函数strxfrm
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char buffer[64] = "Jamsa's 1001 C/C++ Tips";
char target[64];
int length;
// size_t strxfrm(char *dest, const char *src, size_t n)
// 转换字符串src的前n个字符,并把它们放置在字符串dest中
length = strxfrm(target, buffer, sizeof(buffer));
printf("Length %d Target %s Buffer %s\n", length, target, buffer);// Length 23 Target Jamsa's 1001 C/C++ Tips Buffer Jamsa's 1001 C/C++ Tips
return 0;
}
例361:大写字母转换小写字母函数tolower()
#include <stdio.h>
#include <ctype.h>
int main(int argc, char const *argv[])
{
char string[] = "Jamsa's 1001 C & C++ Tips";
int i;
// 把字符转换成小写字母,非字母字符不做出处理
for (i = 0; string[i]; i++)
putchar(tolower(string[i]));
putchar('\n');
for (i = 0; string[i]; i++)
putchar(_tolower(string[i]));
putchar('\n');
return 0;
}
例362:小写字母转换大写字母函数toupper()
#include <stdio.h>
#include <ctype.h>
int main(int argc, char const *argv[])
{
char string[] = "Jamsa's 1001 C & C++ Tips";
int i;
// 把字符转换成大写字母,非字母字符不做出处理
for (i = 0; string[i]; i++)
putchar(toupper(string[i]));
putchar('\n');
for (i = 0; string[i]; i++)
putchar(_toupper(string[i]));
putchar('\n');
return 0;
}
例363:判断文件读写权限的函数access
#include <stdio.h>
#include <io.h>
/**
* int access(const char *filenpath, int mode)
* 确定文件或文件夹的访问权限。即,检查某个文件的存取方式,比如说是只读方式、只写方式等。
* 如果指定的存取方式有效,则函数返回0,否则函数返回-1
* 00 只存在
* 02 写权限
* 04 读权限
* 06 读和写权限
*/
int main(int argc, char const *argv[])
{
int access_mode;
access_mode = access(argv[1], 0);
if (access_mode)
printf("File %s does not exist\n");
else
{
// 判断第1个程序参数指定的文件是否可写
access_mode = access(argv[1], 2);
if (access_mode)
printf("File cannot be written\n");
else
printf("File can be written\n");
// 判断第1个程序参数指定的文件是否可读
access_mode = access(argv[1], 4);
if (access_mode)
printf("File cannot be read\n");
else
printf("File can be read\n");
// 判断第1个程序参数指定的文件是否可读写
access_mode = access(argv[1], 6);
if (access_mode)
printf("File cannot be read/write\n");
else
printf("File can be read/write\n");
}
return 0;
}