电器网站建设,wordpress引导页插件,wordpress集成,济南智能网站建设c primer plus 第16章string 类和标准模板库,string 类输入
c primer plus 第16章string 类和标准模板库,string 类输入 文章目录 c primer plus 第16章string 类和标准模板库,string 类输入16.1.2 string 类输入程序清单 16.2 strfile.cpp 16.1.2 string 类输入
对于类…c primer plus 第16章string 类和标准模板库,string 类输入
c primer plus 第16章string 类和标准模板库,string 类输入 文章目录 c primer plus 第16章string 类和标准模板库,string 类输入16.1.2 string 类输入程序清单 16.2 strfile.cpp 16.1.2 string 类输入
对于类很有帮助的另一点是知道有哪些输入方式可用。对于C-风格字符串有3种方式:char info[100]; cin info; // read a word
cin.getline(info,100);// read a line,discardncin.get(info100)i //read a line,leave n in queue 对于 string 对象有两种方式: string stuff; cin stuff; getline(cin,stuff); // read a word// read a line,discard n 两个版本的 getline()都有一个可选参数用于指定使用哪个字符来确定输入的边界:cin.getline(info,100‘:’);//read up to :,discard : getline(stuff); //read up to :,discard 在功能上它们之间的主要区别在于string版本的 getline( )将自动调整目标 string 对象的大小使之刚好能够存储输入的字符: char fname10] str飑吒ng lname; cin fname;//could be a problem if input size 9 characterscin lnamei//can read a very,very long wordcin.getline(fname10);//may truncate inputgetline(cin,fname);//no truncation 自动调整大小的功能让 string 版本的 getline()不需要指定读取多少个字符的数值参数。在设计方面的一个区别是读取C-风格字符串的函数是istream类的方法而string版本是独立的函数。这就是对于 C-风格字符串输入cin 是调用对象;而对于 string,对象输入cin 是一个函数参数的原因。这种规则也适用于形式如果使用函数形式来编写代码这一点将显而易见: cin.operator(fname); operator(cin,lname); //ostream class method//reqular function 下面更深入地探讨一下 string 输入函数。正如前面指出的这两个函数都自动调整目标 string 的大小使之与输入匹配。但也存在一些限制。第一个限制因素是 string对象的最大允许长度由常量 string:npos指定。这通常是最大的 unsignedint值因此对于普通的交互式输入这不会带来实际的限制:但如果您试图将整个文件的内容读取到单个 string 对象中这可能成为限制因素。第二个限制因素是程序可以使用的 内存量。string 版本的 getline()函数从输入中读取字符并将其存储到目标 string中直到发生下列三种情况 到达文件尾在这种情况下输入流的eofbit将被设置这意味着方法 fai()和eof)都将返回 true;
遇到分界字符(默认为)在这种情况下将把分界字符从输入流中删除但不存储它:读取的字符数达到最大允许值(string:npos 和可供分配的内存字节数中较小的一个)在这种情况下将设置输入流的failbit这意味着方法fail()将返回 true。 输入流对象有一个统计系统用于跟踪流的错误状态。在这个系统中检测到文件尾后将设置eofbit寄存器检测到输入错误时将设置faibit寄存器出现无法识别的故障(如硬盘故障)时将设置 badbit 寄存器一切顺利时将设置goodbit寄存器。第17章将更深入地讨论这一点。 string 版本的 operator()函数的行为与此类似只是它不断读取直到遇到空白字符并将其留在输入队列中而不是不断读取直到遇到分界字符并将其丢弃。空白字符指的是空格、换行符和制表符更普遍地说是任何将其作为参数来调用isspace()时该函数返回ture的字符。 本书前面有多个控制台 string 输入示例。由于用于 string 对象的输入函数使用输入流能够识别文件尾因此也可以使用它们来从文件中读取输入。程序清单16.2是一个从文件中读取字符串的简短示例它假设文件中包含用冒号字符分隔的字符串并使用指定分界符的getline()方法。然后显示字符串并给它们编号每个字符串占一行。
程序清单 16.2 strfile.cpp
// strfile.cpp -- read strings from a file
#include iostream
#include fstream
#include string
#include cstdlib
int main()
{using namespace std;ifstream fin;fin.open(tobuy.txt);if (fin.is_open() false){cerr Cant open file. Bye.\n;exit(EXIT_FAILURE);}string item;int count 0;getline(fin, item, :);while (fin) // while input is good{count;cout count : item endl;getline(fin, item,:); }cout Done\n;fin.close();// std::cin.get();// std::cin.get();return 0;
}
下面是文件 tobuy.txt 的内容:
sardines:chocolate ice cream:popon:eeks:
cottage cheese:olive oil:butter:tofu:通常对于程序要查找的文本文件应将其放在可执行程序或项目文件所在的目录中;否则必须提供完整的路径名。在 Windows系统中C-风格字符串中的转义序列\表示一个斜杠:
fin.open(C:\\cpp\|Progs||tobuy.txt);// file C:\cpp\Progs tobuy.txt注意将:指定为分界字符后换行符将被视为常规字符。因此文件 tobuy.txt 中第一行末尾的换行符将成为包含“cotage cheese”的字符串中的第一个字符。同样第二行末尾的换行符是第9个输入字符串中唯一的内容。