#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int T;
char J[100], S[100];
int count=0;
cin >> T;
while(T--)
{
cin.getline(J,100);
cin.getline(S,100);
puts(J);
puts(S);
for(int i=0; J[i]!='\0'; i++)
{
for(int j=0; S[j]!='\0'; j++)
{
count++;
for(int k=j; S[k]!='\0'; k++)
S[k]=S[k+1];
break;
}
}
cout << count;
}
return 0;
}
我在J,S中输入输入字符串但是在程序执行期间它从控制台cin.getline跳过第二个输入 我拿了测试用例然后拿走了字符串J和S. 它成功了J但是没有得到S字符串?
答案 0 :(得分:1)
你需要使用字符串,std :: string,并在
中调用getlinestd::string s,j;
std::getline(std::cin,j);
std::getline(std::cin,s);
然后如果你想通过单个字符迭代字符串的内容
for(auto i = std::begin(s); i != std::end(s); ++i)
{
std::cout << *i << std::endl;
}
使用迭代器,并使用它们来获取实际的字符值。尽可能远离c字符串。
答案 1 :(得分:1)
此代码:
int T;
// ...
cin>>T;
...从标准输入中读取int
。要让它读取int
,您需要按输入键,但此代码不从输入输入缓冲区。然后...
cin.getline(J,100);
这会尝试从输入缓冲区读取一个字符串,直到第一个换行符。它从输入缓冲区中删除该换行符,但不将其作为字符串的一部分包含在内。因此,如果你看起来不那么紧密,它似乎基本上什么也没做 - 也就是说,你最终得到一个空字符串。
您通常希望坚持使用面向字段的输入(例如您的cin >> T;
或其他面向行的输入(getline
)。然而,将两者混合起来可能有点棘手,尤其是<{1}}来自之后面向字段的输入。不要误解我的意思:可以工作 - 并且工作得非常好,但是你需要知道你在做什么,即便如此,它仍然会让你一次又一次地惊讶。
正如我的评论(以及@ johnathon的回答)中所述,您通常也希望使用getline
来读取std::getline
,而不是使用char数组来读取std::string
。即使充其量,后者也很笨拙。
如果您打算在任何地方使用它,我自己的偏好(通常)是在整个过程中使用面向行的输入。
std::cin.getline
另外,我还避免使用std::string temp;
std::getline(std::cin, temp);
int T = lexical_cast<int>(temp);
while (T--) {
std::string j;
std::getline(std::cin, j);
// ...
作为C ++中普通变量的名称。它通常用作模板参数的名称;将它用于“普通”变量更容易导致混淆,特别是对于更频繁使用模板的更高级程序员。
答案 2 :(得分:0)
(1)在cin&gt;&gt; T和while(T--)之间使用getchar() 如
int T;
char J[100] , S[100];
int count=0;
cin>>T;
getchar();
while(T--){
cin.getline(J,100);
cin.getline(S,100);
(2)。 您还可以通过以下方式解决问题::
char T[10];
char J[100] , S[100];
int count=0;
getline(T,10);
while((atoi(T))--){
cin.getline(J,100);
cin.getline(S,100);
使用其中任何一个,它将解决您的问题。