String 如何使用get()同时输入两个字符串;
我想知道是否有一种方法可以一起输入字符串,就像我们如何输入String 如何使用get()同时输入两个字符串;,string,cin,gets,String,Cin,Gets,我想知道是否有一种方法可以一起输入字符串,就像我们如何输入cin>>a>>b 我们如何使用字符串的gets执行相同的操作?如果您的输入字符串用某种空格分隔(例如“”、“\n”等),那么它将是: gets(s1); gets(s2); 另一种方法是使用。它可以对str1和str2使用两次,并将从流中获取一个输入到字符串中,直到读取num-1字符或达到eos(“\n”、“\t”等)。强烈建议使用此函数,因为它比gets更安全 还有第三种更复杂的方法:您可以定义自己的字符串类(继承自std::st
cin>>a>>b代码>
我们如何使用字符串的gets
执行相同的操作?如果您的输入字符串用某种空格分隔(例如“”、“\n”等),那么它将是:
gets(s1);
gets(s2);
另一种方法是使用。它可以对str1和str2使用两次,并将从流中获取一个输入到字符串中,直到读取num-1字符或达到eos(“\n”、“\t”等)。强烈建议使用此函数,因为它比gets更安全
还有第三种更复杂的方法:您可以定义自己的字符串类(继承自std::string),并在其中定义一个操作符,它将代表get()或fgets();但是这个选择对于你的情况来说实在太复杂和无用了
如果需要使用一个函数,则可以为两个字符串创建重载gets():
void gets(char * str1, char * str2)
{
gets(str1);
gets(str2);
}
同样的技巧也可以通过FGET实现。但是,对你来说,仅仅调用两个get()或fgets()不是太复杂了吗?这已经晚了三个月,但可能值得一写,因为唯一的其他答案是非常离谱的
首先,也是最重要的一点,不要使用get()。没有办法安全地使用它:如果我运气好的话,它可能会被称为溢出我的缓冲区和崩溃我的程序()。它被从最新的C标准中删除是有原因的
第二,cin>>a>>b
读取两个空格分隔的字符串,例如一个句子中的两个单词get()
及其更安全的近亲fgets()
读取一整行,由换行符'\n'
分隔(请注意,它们不会停止在其他空白字符处!)。因此,复制cin
的行为要困难得多-您必须自己进行所有解析。(这并不是说它不能完成;如果必须在C中完成,请签出strtok()
)
C相当于cin>>a>>b代码>是scanf()
:字符a[80],b[80];scanf(“%79s%79s”,a,b)代码>但是,请注意,您只能读取最大固定长度的字符串(在本例中为79个字符)。在C中安全地读取任意长度的字符串是相当复杂的;您需要以固定大小的块读取它们,并分配足够的内存将这些块组合在一起。这是错误的获取
读取以换行符结尾的行;其他空格只是行的一部分。此外,get
本身就是不安全的,永远不应该使用(从2011年的标准开始,它甚至已经从C中删除)代码>有效,为什么要寻找另一种方法来做同样的事情?