不输入第二个字符串[重复]

Posted

技术标签:

【中文标题】不输入第二个字符串[重复]【英文标题】:not taking input of second string [duplicate] 【发布时间】:2021-06-11 14:36:31 【问题描述】:

您好,我正在解决 Stanely 的《C++ Primer》一书的问题。问题如下:-

编写一个程序来读取两个字符串并报告是否 字符串相等。如果不是,请报告两者中哪个更大。现在,改变 程序报告字符串是否具有相同的长度,如果 不是,报告哪个更长。

我使用变量选择在程序之间切换,即是否检查字符串是否相等。或者检查字符串是否具有相同的长度。

#include<iostream>
using namespace std;
int main()
  char choice;
  cout<<"Please enter choice"<<endl<<"For Larger press (L) and for longer press (l) "<<endl;
  cin>>choice;
  
  string s1, s2 ;
  getline(cin,s1);
  getline(cin,s2);
  if(choice=='L')
  if(s1!=s2)
    if(s1>s2) 
      cout << "string which is larger is : " <<s1<<endl;
    
    else
      cout<<"string which is larger is : " <<s2<<endl;
    
  
  else
    cout<<"Both strings are equal "<<endl ;
  
  
  else if (choice == 'l')
    if(s1.size() != s2.size())
      if(s2.size()> s1.size())
    cout<<"Longer string : "<<s2<<endl;
      
      else 
    cout<<"Longer string : " << s1<<endl;
      
    
    else 
      cout<<"Both strings have same length" <<endl;
    
  
  else
    cerr<<"wrong input!! "<<endl;
    return -1;
  
  
  return 0;

    

但是当我在编译程序时,它只接受字符串 s1 的输入,而不接受字符串 s2 的输入。

输出如下:-

【问题讨论】:

调试器。使用调试器的绝佳示例。调试器允许您单步执行程序,观察变量。 只接受字符串 s1 的输入,不接受字符串 s2 的输入。 你确定吗?我期望相反:s1 始终是一个空字符串,s2 是唯一可以输入的。原因很简单。要输入 choice,您必须使用 ENTER 确认,但 cin &gt;&gt; choice; 会将其留在输入缓冲区中。然后,如果你调用getline(cin,s1);,它会立即被消耗——在s1 中留下一个空字符串。 打印消息以查看您实际要求这两个字符串的位置。 cout &lt;&lt; "Enter string one: "; getline(cin,s1); cout &lt;&lt; "Enter string two: "; getline(cin,s2); 要解决这个问题,您应该调查std::istream::ignore。 (当然,@ThomasMatthews 的调试提示也是值得的。) 【参考方案1】:

显然使用cin&gt;&gt; 会从输入中忽略'\n',该输入被第一个getline() 吸收,正如@Scheff'sCat 所说,读取所有内容直到'\n'。这意味着第一个getline() 会立即退出并只显示第二个。

您可以尝试使用cin.ignore('\n')

【讨论】:

你为什么不直接使用 cin 而不是 getline() 因为格式化的输入操作符在第一次出现空白时停止,而getline() 读取直到分隔符(@默认为 987654329@)或 EOF。 我读错了。我很抱歉。 @steveo314 啊,我明白了。斜体印刷的东西被引用了,其他的我对此发表评论。 ;-) 忘了斜体是干什么用的。我修改了我的声明。 注意:如果您使用ignore 的分隔符参数而不是仅采用默认值EOF,则必须指定计数。通常这是使用cin.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n') 完成的,以忽略流中可能存在的所有内容,但这通常是完全矫枉过正的。如果您在用户输入的前几百或几千个字符中没有找到换行符,则可能有其他问题。 Documentation link

以上是关于不输入第二个字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中删除重复的单词时会发生字符串标记问题

字符串查找(重复次数)

java 中如何 找出两个集合中的不重复的元素

BizTalk Map 累积连接字符串

C语言程序

JAVA 键盘输入两个字符串,统计第二个串在第一个串中出现的次数(同求其类、包的用法)