c++:MFC _cstring.h库常用函数

这里写自定义目录标题

  • 函数介绍
  • 示例
    • 1.字符串复制
      • 1.1.strcpy
      • 1.2. strncpy
    • 2.字符串连接
      • 2.1. strcat
      • 2.2. strncat
    • 3 字符串比较
      • 3.2 Compare函数使用
    • 4 字符串查找
      • 4.1 strchr
    • 5.其他函数
      • 5.1字符串长度
      • 5.2 改变连续一段字符的值

函数介绍

1.strcpy 字符串拷贝:charstrcpy(char dest, constchar* src );
2.strncpy 字符串固定字符拷贝:charstrncpy(char dest,constchar* src, size_t num );
3.strcat 字符串连接:char * strcat ( char * dest, const char * src);
4.strncat 字符串固定字符连接char * strncat ( char * dest, const char * src, size_t num );
5.strcmp 字符串比较:int strcmp ( const char * str1, const char * str2 );
6.strchr 字符串中字符查找:const char * strchr ( const char * str, int character );
7.strstr 字符串中字符串查找:const char * strstr ( const char * str1, const char * str2 );
8.strlen 字符串长度:size_t strlen ( const char * str );
9.memset 字符串初始化或者批量重置:void * memset ( void * ptr, int value, size_t num );

示例

1.字符串复制

1.1.strcpy

strcpy的作用是复制整个字符数组到另一个字符数组,因此也就非常简洁,只有两个参数:

char * strcpy ( char * destination, const char * source );
前一个是要复制到的目标数组起始位置,后一个是被复制的源数组起始位置。使用也非常简单,下面就用一个例子来说明.

int main () {
 char str1[] = "Sample string";
 char str2[40];
 char str3[40];
 strcpy (str2, str1);
 strcpy (str3, "copy successful");
 printf ("str1: %snstr2: %snstr3: %sn", str1, str2, str3);
 return 0;
}

1.2. strncpy

strncpy与strcpy很类似,只是可以指定复制多少个字符。它的原型是:

char * strncpy ( char * destination, const char * source, size_t num );
显前两个参数的含义与strcpy相同,第三个参数num就是要复制的字符个数。需要注意的是因为是部分复制,所以该函数不会帮你添加’0’,要记得在调用完之后自己添加一个。

int main () {
 char str1[] = "To be or not to be";
 char str2[40];
 char str3[40];
 
 /* 整个字符串进行复制: */
 strncpy ( str2, str1, sizeof(str2) );
 
 /* 部分复制(这里是复制5个字符): */
 strncpy ( str3, str2, 5 );
 str3[5] = '0'; /* 添加结尾符 */
 
 puts (str1);
 puts (str2);
 puts (str3);
 
 return 0;
}

2.字符串连接

2.1. strcat

strcat的功能是把一个字符串连接到另一个字符串的后面。

char * strcat ( char * destination, const char * source );
前一个是目标字符串,后一个是要添加到后面的源字符串。

int main () {
 char str[80];
 strcpy (str, "these ");
 strcat (str, "strings ");
 strcat (str, "are ");
 strcat (str, "concatenated.");
 puts (str);
 return 0;
}

2.2. strncat

根据strcpy和strncpy之间的关系,应该猜到,该函数是可以指定字符个数进行连接。

char * strncat ( char * destination, const char * source, size_t num );
int main () {
 char str1[20];
 char str2[20];
 strcpy (str1, "To be ");
 strcpy (str2, "or not to be");
 strncat (str1, str2, 6);
 puts (str1);
 return 0;
}

3 字符串比较

3.1. strcmp
对两个字符数组我们不能直接if (s > t)这样比较,要这样比较的是两个字符数组的指针的地址。因此要用到strcmp函数。

int strcmp ( const char * str1, const char * str2 );
两个参数是要比较大小的字符数组,返回值是它们的大小关系。具体方式是:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’0’为止。

如果str1和str2相等则返回0;

如果str1小于str2则返回小于零,如果str1大于str2,则返回大于零。

int main () {
 char key[] = "apple";
 char buffer[80];
 do {
 printf ("Guess my favorite fruit? ");
 fflush (stdout);
 scanf ("%79s",buffer);
 } while (strcmp (key,buffer) != 0);
 puts ("Correct answer!");
 return 0;
}

输出结果:

Guess my favourite fruit? orange
Guess my favourite fruit? apple
Correct answer!

3.2 Compare函数使用

test1.Compare(test2) == 0

4 字符串查找

4.1 strchr

strchr函数可以在一个字符串里找某个字符第一次出现的位置。

const char * strchr ( const char * str, int character );
前一个是原字符串,后一个是要查找的字符。

int main () {
 char str[] = "This is a sample string";
 char * pch;
 printf ("Looking for the 's' character in "%s"...n", str);
 pch = strchr(str, 's');
 while (pch ! =NULL) {
 printf ("found at %dn", pch - str + 1);
 pch = strchr(pch + 1, 's');
 }
 return 0;
}

输出:

Looking for the ‘s’ character in “This is a sample string”…
found at 4
found at 7
found at 11
found at 18
4.2 strstr
strstr函数可以在一个字符串里查找另一个字符串第一次出现的位置。

const char * strstr ( const char * str1, const char * str2 );
其中前一个是文本串,后一个是模式串。

int main () {
 char str[] = "This is a simple string";
 char * pch;
 pch = strstr (str, "simple");
 strncpy (pch, "sample", 6);
 puts (str);
 return 0;
}

输出:

This is a sample string。

5.其他函数

5.1字符串长度

strlen用于求一个字符数组的长度,注意它是从给定的起始位置开始不断往后尝试,直到遇到’0’为止的,因此它的时间复杂度并不是常数级别的,而是取决于字符数组的长度,在字符数组没有变动的情况下请务必不要重复调用。

size_t strlen ( const char * str );
那么参数毋庸置疑自然就是要求长度的字符数组了。

int main () {
 char szInput[256];
 printf ("Enter a sentence: ");
 gets (szInput);
 printf ("The sentence entered is %u characters long.n", (unsigned)strlen(szInput));
 return 0;
}

5.2 改变连续一段字符的值

memset是一个非常好用的函数,不仅在字符串方面。它可以把连续一段区间的内存修改成同一个值,以字节为单位。而一个字符正好就是一个字节,这也就让memset可以很好的为字符串的区间修改提供服务。

void * memset ( void * ptr, int value, size_t num );
ptr指向要修改的内存块的起始地址,value是要修改成什么值,num是修改多少个。

int main () {
  char str[] = "almost every programmer should know memset!";
  memset (str, '-', 6);
  puts (str);
  return 0;
}

你可能感兴趣的:(C/C++,c++)