转自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的字符串的长度?