函数和c-风格字符串,string类

1. 将c-风格字符串作为参数的函数

如果要将字符串作为参数传递给函数,表示字符串的方式有三种:

char 数组

用引号引起的字符串常量

被设置为字符串的地址的char指针,上面三种选择的类型都是char指针,因此可以作为字符串的处理函数的参数

char ghost[15] = "galloping";(其余位置全部为'')

char * str = "galumphing";  只有new的指针需要delete释放,防止操作内存泄漏

int n1 = strlen(ghost);

int n2 = strlen(str);

int n3 = strlen("gamboling");

strlen函数传入一个指针,统计从指针开始到非零字符的个数

例:统计一个字符串中某个字符出现的次数

2. 返回c-风格字符串的函数

例:输入一个字符,扩展该字符到指定长度的字符串

 3. string

string类将string::npos定义为字符串的最大长度

a. 构造函数

 构造函数的测试函数

 b. string类的输入

对于c风格的字符串,有三种方式:

char info[100];

cin >> info;

cin.getline(info, 100)  // read a line ,discard

cin.get(info, 100);  // read a line, leave in queue

实际上上面两个函数只能读入99个字符,最后一位自动置为   

对于string类型的对象,有两种方式

string stuff;

cin >> stuff;  // read a word

getline(cin, stuff);  // read a line, discard   但是get(cin, stuff)不可用

char* 和string类型都有一个可选参数,用于指定使用哪个字符来确定输入的边界。边界字符不会录入。

cin.getline(info, 100, ':");

getline(cin, stuff, ':');

在功能上面,它们之间的主要区别在于string的版本getline()将自动调整string对象的大小,自动存储输入的字符。

char fname[10];

string lname;

cin >> fname;  // could be a probelm if input size > 9 characters

cin >> lname;  // can read a very, very long word

cin.getline(fname, 10);  // may truncate input

getline(cin, fname);  // no truncation

自动调整大小的功能能让string版本的getline()不需要指定读取多少个字符的数值参数。

另一个主要的区别在于读取c风格的字符串函数是istream函数,但是string版本是独立的函数。

string版本的getline()函数从输入中读取字符,并将其存储在目标string中,直到发生下面三种情况之一

到达文件尾,在这种情况下,输入流的eofbit将被设置,意味着fail()方法和eof()方法都会返回true

遇到分界字符(默认为 ),在这种情况下,将分解字符从输入流中删除,但是不会存储它

读取到字符数达到最大允许值(string::npos和可供分配的内存字节数中较小的那一个),在这种情况下,将设置输入流的failbit,这意味着方法fail()将返回true

输入流对象有一个统计系统,用于跟踪流的错误状态,在这个系统中,检测到文件尾后设置eofbit寄存器,检测到输入错误时将设置failbit寄存器,出现无法识别的故障(如硬盘故障)将设置badbit寄存器,一切顺利设置goodbit寄存器

string版本的operator<<()函数行为与此类似,它不断读取,直到遇到空白字符并将其留在输入队列中,而不是不断的读取,直到遇到分界字符将其丢弃。空白字符指空格,换行符和制表符。更直白的说,是任何将其作为参数来调用isspace()时,该函数返回true的字符。

例:读取文件,windows系统中,c风格字符串中的\转义序列表示一个斜杠

文件内容如下:

程序代码如下:

 分析:第五行和第九行出现了换行原因,指定了分界符以后,换行符将被视为常规字符,因此tobuy.txt中第一行末尾的换行符将称为cottage cheese中的第一个字符,第二行末尾的字符也会成为第九个输入字符串的唯一内容。

c. 使用字符串

 4. 字符串类型转换

 

atoi当解析的字符超出返回类型的范围时,会自动转换为该类型能够表示的最大值或者最小值

原文地址:https://www.cnblogs.com/feng-ying/p/10511028.html