C++ 初学者指南 第四篇(6)一些字符串相关的库函数

来源:互联网 发布:python 去掉水印 编辑:程序博客网 时间:2024/06/10 00:01

转自http://blog.csdn.net/zhangxingping/article/details/5614610

必备技能 4.5: 一些字符串相关的库函数
     C++支持很多处理字符串的函数。最常用的有:
strcpy()
strcat()
strcmp()
strlen()

这些处理字符串的函数使用同一个头文件,<cstring>。下面我们就学习一下这些函数的使用方法。
strcpy
    该函数的常用形式如下:
strcpy(目的, 源);
这个函数把源字符串的内容复制到目的字符串中。
注意,用于目的字符串的数组的大小必须足够大,以便存储源字符串中的内容。如果目的字符串的数组大小不够大,则会导致数组写越界,这将有可能导致程序崩溃。
strcat
    该函数的常用形式如下:
strcat(字符串1, 字符串2);
函数把字符串2的内容追加到字符串1的尾部。
字符串2保持不变。使用这个函数的时候,也需要保证用于存储字符串1的数组要足够大,能够保存得下字符串1和字符串2的内容。
strcmp
    该函数的常用形式如下:
strcmp(字符串1, 字符串2);
该函数对两个字符串进行比较。
如果两个字符串的内容相同,则返回0;如果字符串1根据字典序大于字符串2,则返回一个正数;如果字符串1根据字典序小于字符串2则返回一个负数。
 使用这个函数需要注意的是如果两个字符串相同,函数的返回值为假。因此,如果需要在两个字符串相同的时候作某些事情,就必须在判断语句中使用!。例如,下面代码片段中控制if语句的条件只有在str的内容和“C++”相同的时候才为真。
if ( !strcmp(str, “C++”)) cout << “str is C++”;
strlen
    该函数的通用形式如下:
strlen(字符串);
函数返回字符串的长度。

 使用字符串函数的示例:
//演示字符串函数的使用
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int main () 
{
    char s1[80], s2[80];

    strcpy(s1, "C++");
    strcpy(s2, " is power programmimg.");

    cout << "lengths:" << strlen(s1);
    cout << ' ' << strlen(s2) << '\n';

    if (!strcmp(s1,s2))
        cout << "The strings are equal\n";
    else cout << "not equal\n";

    strcat(s1,s2);
    cout << s1 <<'\n';

    strcpy(s2,s1);
    cout << s1 << " and " << s2 << "\n";

    if (!strcmp(s1,s2))
        cout << "s1 and s2 are now the same.\n";

    return 0;
}
程序的输出结果如下:
lengths:3 22
not equal
C++ is power programmimg.
C++ is power programmimg. and C++ is power programmimg.
s1 and s2 are now the same.
使用字符串结束标识
 字符串以0结尾这个特点可以被用来简化程序。
例如,下面的程序把一个字符串转换为大写的。
//把一个字符串转换为大写的
#include <iostream>
#include <cstring>
#include <cctype>

using namespace std;

int main () 
{
   char str[80];
   int i ;

   strcpy(str, "This is a test");

   for ( i = 0; str[i]; i++ )
   {
       str[i] = toupper(str[i]);
   }

   cout << str;

   return 0;
}
程序的输出结果如下:
THIS IS A TEST

上面的这个程序中用到了库函数toupper()。这个函数返回字符参数的大写字符。使用该函数,需要引入头文件<cctype>
    需要注意的是for循环的控制条件为控制变量索引的字符数组的元素。这样作是合理的,因为真值就是任何非零的值。请记住,所有的字符值都是非零的,只有字符串的结束标志是0。因此,这个循环会一直进行,直到遇到字符串的结束标志,也就是str[i]为零的时候。因为所用的用户标记字符结束的0都是在字符传的最末尾,所以上面的循环能够正确第完成我们预期的任务。在专业的C++代码中,我们会看到很多这种使用字符串结束标记的例子。
专家答疑
问:除了toupper()之外,C++还支持别的字符处理函数吗?
答:是的。C++标准库包含了几个其他的处理字符的函数。例如与toupper()相对应的tolower()。它返回一个字符对应的小写的字符。我们还可以使用函数isupper()来判断一个字符是不是大写的。如果字符是大写的,这个函数返回真值。还有islower()函数,如果字符是小写的,函数返回真值。还有其他的函数,如isalpha(), isdigit(), isspace()和ispunct()。这些函数的参数都是一个字符,函数返回字符的类型。例如, isalpha()函数,如果字符是字母表中的字符,则函数返回真值。

练习:
1. strcat函数是用来作什么的?
2. 当用strcmp函数比较两个相同的字符串的时候,函数返回什么?
3. 写出如何获取名为mystr的字符串的长度?