欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【和春笋一起学C++】(十五)字符串作为函数参数

【和春笋一起学C++】(十五)字符串作为函数参数

2025/5/25 5:41:07 来源:https://blog.csdn.net/u013230291/article/details/148076007  浏览:    关键词:【和春笋一起学C++】(十五)字符串作为函数参数

目录

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对象的指针。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词