目录
1. char指针作为函数参数
2. string对象数组作为函数参数
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对象数组。
下面是一个以string对象数组作为函数参数的简单实例。
#include <iostream>
#include <cstring>using namespace std;void display(const string sa[], int n)
{for (int i = 0; i < n; i++){cout << i + 1 << ": " << sa[i] << endl;}
}int main()
{const int size = 5;std::string list[size];for (int i = 0; i < size; i++){cout << i + 1 << ": ";getline(cin,list[i]);}cout << "your list: \n";display(list, size);return 0;
}
程序说明:
- 数组list的每个元素都是一个string对象;
- 和内置变量一样,当数组作为函数参数时,数组名代表指向数组第一个元素的指针。当对象数组作为函数参数时也同样如此,因此,数组名sa是指向第一个string对象的指针。