【问题标题】:How can I only input a string(name) which starts with letter "A or a" in cpp?如何在 cpp 中仅输入以字母“A 或 a”开头的字符串(名称)?
【发布时间】:2021-07-21 14:14:45
【问题描述】:

我试图只输入以 A 开头的字符串,如果使用其他字母会给出错误消息。我已经厌倦了:

#include <iostream>
 #include <bits/stdc++.h>
 using namespace std;

 int main(){
     char str[30];
     if(str[0] == "A"){
         cin.get(str, 30);
     }else{
         cout<<"Any name other than starting from A isn't supported."<<endl;
    
     cout<<str<<endl;
     return 0;  
 }
 }

我收到此错误:trialz.cpp:在函数“int main()”中: trialz.cpp:7:18:错误:ISO C++ 禁止指针和整数之间的比较 [-fpermissive] 7 |如果(str [0] ==“A”){ | ^~~ 我是初学者,非常感谢您的帮助!

【问题讨论】:

  • 不仅类型错误(将const char*char 进行比较),而且逻辑是倒退的。您甚至在读取数据之前都在比较str 的内容是不确定的,所以即使你用if(str[0] == 'A') 解决了第一个问题,你仍然会调用未定义的行为。如果您是初学者,我不能再强调将a good book(或三个)作为您学习的基础的重要性。
  • 修复大括号。你可以这样做: if(str[0] == 'A') 如果你想使用“string”而不是“char”,那么你可以这样做: string str ="Ahello"; if(str.at(0) == 'A')
  • 对字符串执行的第一个操作是测试第一个字符是否为'A'。如果它是'A',那么您的代码会从用户那里读取一个字符串。您需要更改顺序 - 先读取字符串,然后测试其内容。此外,"A" 是字符串文字,'A' 是单个字母 - 当需要单个字符时不能使用字符串,反之亦然。此外,请考虑使用 std::string 而不是 char 的原始数组。
  • 如果你不打代码,最好注意stackoverflow.com/questions/31816095/…

标签: c++


【解决方案1】:

你不能阻止用户输入以'A'开头的字符串,但你可以在他输入后检查它是否以'A'开头

#include <iostream>
#include <string>

int main()
{
   std::string s;
   std::getline(std::cin, s);
   
   if(s.front()=='A' || s.front()=='a'){
      std::cout<<"Any name other than starting from A isn't supported.\n";
   }else{
      std::cout<<s;   
   }

   return 0;
}

【讨论】:

  • 您好,用户。请注意,一致缩进的代码可能有更高的支持率。
  • 一个有趣的例子,错误(未经测试)的代码得到了投票。 if 中的条件与它控制的代码不匹配。此外,字符串s 不包含行尾标记,因此欢迎使用else 子句中的&lt;&lt; "\n"。此外,对于空的 s 调用 front() 没有任何保护措施。
  • 这个想法是告诉解决问题的方法,不要在这里处理所有边缘情况
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
相关资源
最近更新 更多