如何将输入存储为字符串,直到在C++中输入一个或多个特定字符串?

How to store input as a string until one or more specific string(s) has/have been entered in C++?

提问人:Ahmet Yücel 提问时间:11/19/2020 更新时间:11/20/2020 访问量:344

问:

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

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

...然后继续

问题是我使用函数(我稍后将展示),但我无法同时控制“END”和“end”。 函数只检查一个。cin.getline()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”,以先到者为准。

有什么方法或任何其他功能可以使它按应有的方式运行?

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

C++ 字符串 IOSTREAM

评论

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

答:

0赞 captainmoron 11/20/2020 #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(更多信息在这里)。

主要内容在内部 while 循环中。

while(true)

让 while 循环永远持续下去。

你会得到一个新的输入行

    cin.getline (target, MAX_TARGET_LENGTH);

存储在变量目标中。然后,您可以将“target”转换为字符串

std::string line = target;

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

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

如果其中一个或两个语句都为真,则“break”将退出内部 while 循环,并使程序再次打印“Enter source string:”。

评论

0赞 Ahmet Yücel 11/20/2020
感谢您抽出时间接受采访。这真的很有帮助,你:)挽救了这一天。
0赞 captainmoron 11/20/2020
很高兴能帮上忙。请考虑将我的答案标记为解决方案。谢谢。