在c++中,getline()不是读取字符串的所有字母,而是一个接一个地接受多个字符串
In c++ getline() is not reading all the letters of the string while accepting multiple strings one after the other
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t; //Number of test cases
while(t--){
cin.ignore();
string s;
getline(cin,s);
cout<<s<<endl;
}
return 0;
}
输入:
2
AMbuj verma
Aaaa bBBB
Bm Chetan
输出:
AMbuj verma
aaa bBBB
m Chetan
上面的程序没有读取字符串的第一个字符。
这就是我得到的输出。
我也使用过cin.ignore()
您需要做的是将cin.ignore()
带到while
循环之外,因为每次循环工作时,它都会占用字符串的第一个字母。
cin>>t; //Number of test cases
cin.ignore();
while(t--){
string s,a;
getline(cin,s);
cout<<s<<endl;
}
最后,为什么在代码中没有使用string a
的情况下编写string s, a
。
您在循环中调用cin.ignore();
,因此它将在每次迭代中忽略一个字符。由于您只使用operator >>
一次,因此需要将对ignore
的调用移出循环,并在输入之后进行调用。
cin>>t; //Number of test cases
cin.ignore(); // get rid of newline
while(t--){
string s,a;
getline(cin,s);
cout<<s<<endl;
}
实际上是的,cin.ignore()
会消耗您的字符。现在要详细添加一些内容,输入基本上存储在缓冲区中(而不是在重定向的情况下)。现在,当您使用getline时,它会执行此操作。
(1) istream& getline (istream& is, string& str, char delim);
(2) istream& getline (istream& is, string& str);<--you used this
从
is
中提取字符并将其存储到str
[getline(cin.str)]中,直到找到定界字符delim(或换行符'\n',对于(2))。如果在is中到达文件末尾,或者如果在输入操作期间发生一些其他错误。
如果找到分隔符,则提取并丢弃(即未存储,并且下一个输入操作将在其之后开始)。
所以当基本上n
被getline
自身消耗和丢弃时。现在您使用cin.ignore()
istream&忽略(streamsize n=1,int delim=EOF);摘录和丢弃字符从输入序列中提取字符丢弃它们,直到提取了n个字符或一个比较起来等于delim。
所以您没有指定任何内容,所以它会丢弃缓冲区中可用的一个字符,即第一个字符。(但你以为会有n
被消耗,但它不在那里,因为它被getline()
丢弃了。
这就是你如何得到这样的输出。
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何检查一个c++字符串中有多少相同的字符/数字
- 获取用C/C++打印的最后一个字符串
- cin >> int 给定一个字符串将 int 赋值为 0
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- C++为 void 指针分配一个字符串
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何在另一个字符串的x位置插入一个字符串?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 在另一个字符串中插入文件扩展名之前的字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- C++自定义流操纵器,用于更改流上的下一个字符串
- 从类返回一个字符串 — 奇怪的行为
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 你能从"volatile const char*"构造一个字符串吗?(不使用`const_cast`