在 C++ 中输入字符串 do while

Posted

技术标签:

【中文标题】在 C++ 中输入字符串 do while【英文标题】:Input string in C++ do while 【发布时间】:2020-11-19 07:39:29 【问题描述】:

我正在尝试读取一个字符串作为输入。

字符串只能包含 A C G 和 T 字母,长度不能超过 20000。

如果长度超过 20000 或包含除 A C G 或 T 以外的任何其他字母,则打印“错误”并再次读取。

示例输入:ACCGGTATTTACG

这是我的代码,目前它为每个输入打印错误。

int main()

string str;
string tmp;
bool hiba;
do
    cout<<"Str: ";cin>>str;
    for(int x = 0;x < str.length();x++)
        hiba = (cin.fail() || str[x] != 'A' || str[x] != 'C' ||str[x] != 'G' ||str[x] != 'T' || str.length() > 20000);
        if(hiba)
            cout<<"Error\n";
            cin.clear();
            getline(cin,tmp);
            break;
        
    

while(hiba);

【问题讨论】:

是时候了解switch 语句了。 什么是dns?那没有显示。尝试将验证拆分为您可以调用的函数。您还无缘无故地混合使用了getlinecin &gt;&gt; str。这些工作方式完全不同。一个将包含换行符。 这是 str.length() 我在发帖前忘记更改了。 这段代码对我来说几乎没有意义,因为你读入一个字符串,然后验证字母,然后接受更多输入,一次是行字符?你将不得不给我们一个你正在使用的输入和你正在执行的预期过程的例子。如果这只是“验证字符串仅包含字符 ACGT”,那么这不完全是,但如果是这种情况,它可以被修复。 内部if (hiba) 是否应该像“错误,重读行”之类的陷阱?如果是这样,您需要先跳出 @9​​87654327@ 循环。 【参考方案1】:

这是您要求的直接音译。注意使用std::string::find_first_not_of 来查找“坏”字符。另请注意,如果 std::cin &gt;&gt; sequence 失败,它将返回一个空字符串。你需要处理那个极端情况。

std::string read_dna(int max_length) 
  std::string sequence;
  while (std::cin >> sequence) 
    if (sequence.length() > max_length ||
        sequence.find_first_not_of("ACGT") != std::string::npos) 
      std::cerr << "error" << std::endl;
     else  
      return sequence;
    
  
  return std::string;

【讨论】:

以上是关于在 C++ 中输入字符串 do while的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 使用 do while 验证密码(输入星号)

Ruby 中有“do ... while”循环吗?

C语言编程,用while语句,输入一行字符统计字母的个数

C++中,do while, for loop和while loop之间有啥不同

C++中do while()的用法

while循环对C++中字符串中的每个单词重复