【和春笋一起学C++】(十五)字符串作为函数参数
1. char指针作为函数参数
在C语言中,表示字符串的方式有3种:
- char数组
- 用引号括起的字符串常量
- char指针
这3种形式都可以将其作为实参传递给函数中的参数(char*),因此函数的形参需要使用char*类型。将字符串作为参数来传递,实际上传递的是字符串第一个字符的地址。
需要注意的是,字符串与普通char数组的区别,字符串有内置的结束字符(空置字符,‘\0’),普通的char数组包含字符,但不是以空值字符结尾的,所以它不是字符串。所以C风格的字符串传递给函数参数时,可以不将字符串长度的参数传递给函数。函数内部可以通过循环计算出字符串的长度。
字符串作为函数参数的一个实例:
#include <iostream>
#include <cstring>using namespace std;int c_in_str(const char* str, char ch)
{int count = 0;while (*str){if (*str==ch){count++;}str++;}return count;
}int main()
{char array_c[15] = "ubuahsdduash";const char *pt_c = "shadhasshdasdh";int u_num = c_in_str(array_c,'u');int s_num = c_in_str(pt_c, 's');cout << "u number in " << array_c<< " is: " << u_num << endl;cout << "s number in "<< pt_c<<" is: " << s_num << endl;return 0;
}
程序输出如下:
程序说明:
- c_in_str函数中的字符串参数在函数中不应该被修改,因此字符串参数需要设置为const。
- c_in_str函数中演示了字符串处理的标准格式:
while(*str)
{statement;str++;
}
开始,str指向字符串的第一个字符,因此*str表示的是第一个字符。循环语句中,只要*str不为空值字符(‘\0’ ),*str就为非零值,循环将继续。在每轮循环结尾处,表达式str++将增加一个字节,使得char指针指向字符串中的下一个字符。最终str*将指向字符串结尾的空值字符,使得*str等于0(空值字符的数字编码为0),从而结束循环。
2. string对象作为函数参数
C风格字符串和string对象用途几乎相同,但与数组相比,string对象与结构更相似。例如:可以将一个结构赋给另一个结构,也可以将一个对象赋给另一个对象。如果需要多个字符串,可以声明一个string对象数组。