【问题标题】:How to store input as a string until one or more specific string(s) has/have been entered in C++?如何将输入存储为字符串,直到在 C++ 中输入了一个或多个特定字符串?
【发布时间】:2020-11-19 13:51:28
【问题描述】:

这是我第一次进入该网站,目前我是大学学生,正在学习 C++。在给定的作业中,我遇到了一个问题,并且一直在尝试解决它,但找不到完整的解决方案。简而言之,我需要输入直到读取“END”或“end”这个词。 例如;

Enter source string: there are good times
and there are bad times
END
Enter search string: are+

...然后继续

问题是我使用cin.getline() 函数(我将在稍后展示),但我无法同时控制“END”和“end”。 cin.getline() 函数只检查一个。

这是我的一段代码;

#define MAX_TARGET_LENGTH 500
char target[MAX_TARGET_LENGTH];
cout << "Enter source string: ";
cin.getline (target, MAX_TARGET_LENGTH, 'END');

如你所见,我需要让它检查“END”或“end”,以先到者为准。

是否有任何方法或任何其他功能使其按应有的方式运行?

感谢您的关注,如果我输入的问题在某种程度上令人困惑或错误,抱歉。

【问题讨论】:

  • 'END' 是一个多字符的字符常量,它可能不是你想要的。
  • 如果您需要在字符串开头和单词的第一个实例之间的子字符串,我会使用 std::string::substrstd::string::find
  • 为什么你使用带有cin.getline 的C 字符串而不是带有std::getlinestd::string?这是我们应该知道的某种限制吗?
  • 我之前用过getline(),但它只读取一行,一旦按下回车,它就会读取并将其作为字符串读取,但没有限制。
  • @MikeCAT 是的,我明白了,因为它在存储的句子末尾留下字母 E 和 N,但我想我以后可以删除它们。

标签: c++ string iostream


【解决方案1】:

我想出了以下解决方案:

#include <iostream>
#include <vector>
using namespace std;

#define MAX_TARGET_LENGTH 500

int main() {
  char target[MAX_TARGET_LENGTH];
  while(true)
  {
    cout << "Enter source string: ";
    while(true)
    {
      cin.getline (target, MAX_TARGET_LENGTH);
      std::string line = target;
      if(line.compare("end") == 0 || line.compare("END") == 0)
      {
        break;
      }    
    }
  }
  return 0;
}

我正在使用String 类来解决问题。

字符串是表示字符序列的对象。

它们具有有用的功能。其中之一是“比较”功能。有了它,您可以检查一个字符串是否等于另一个字符串。如果字符串相同,该函数将返回 0。否则它将返回 1 或 -1(更多信息here)。

主要的事情发生在内部的while循环中。

while(true)

让 while 循环永远持续下去。

你得到一个新的输入行

    cin.getline (target, MAX_TARGET_LENGTH);

您存储在变量目标中。然后,您可以使用

将“目标”转换为字符串
std::string line = target;

因为,类型是兼容的。 if 语句然后检查输入的“end”或“END”。

if(line.compare("end") == 0 || line.compare("END") == 0)
{
  break;
}    

如果这些语句中的一个或两个为真,“break”退出内部while循环并让程序再次打印“输入源字符串:”。

【讨论】:

  • 感谢您的宝贵时间。这真的很有帮助,你挽救了一天:)。
  • 很高兴能提供帮助。请考虑将我的答案标记为解决方案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2021-01-25
  • 2021-07-10
相关资源
最近更新 更多