如果有多个参数的语句需要为真?

时间:2018-02-21 20:02:23

标签: c++ string if-statement

我参加了我的第一个编码课,而且我遇到了障碍。我正在编写一个程序,需要在一组4或5个字符中选出第二个和第三个字符,根据它找到的值给出相应的输出。

这是我迄今为止的一些例子。

include <iostream>
#include <string>
using namespace std;
int main()
{ //start of main function
system("cls");
string parts = " ";
char input = ' ';


cout << "******** Part Number Program ********" << endl << endl;
cout << "Enter the part number (x to end): ";
getline(cin, parts);

while (parts != "x" || parts != "X")
{   //start while



    if (parts.substr(1, 1) == "M" && parts.substr(2, 1) == "P")//start if
    {
        cout << "Mail - Prioity" << endl << endl;
    }//end if
    else if (parts.substr(1, 1) == "F" && parts.substr(2, 1) == "S")//start if
    {
        cout << "FedEx - Standard" << endl << endl;
    }//end if

除了小写字母之外,它都有效。例如,如果我要输入7MP7,我将获得输出Mail-Prioity。但是,如果我输入7mp7,我会收到错误消息。关于如何解决这个问题的任何建议?

4 个答案:

答案 0 :(得分:1)

#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

int main(){
    string data = "This Will Be All UpperCase When After The Next Line Code";
    transform(data.begin(), data.end(), data.begin(), ::toupper);
    cout << data << endl;
}

答案 1 :(得分:0)

您可以使用不区分大小写的比较函数(例如strcasecmp)来比较字符。请参阅文档here

if (srtcasecmp(parts.substr(1, 1).c_str(), "M") == 0 && srtcasecmp(parts.substr(2, 1).c_str(), "P") == 0) {//your code}

甚至更干净:

if (srtcasecmp(parts.substr(1, 1).c_str(), "M") & srtcasecmp(parts.substr(2, 1).c_str(), "P") == 0) {//your code}

答案 2 :(得分:0)

正如其中一条评论所指出的,

while (parts != "x" || parts != "X")

不对。条件将始终评估为true。它必须是:

while (parts != "x" && parts != "X")

您可以使用以下方法简化循环中的逻辑:

char secondLetter = std::tolower(parts[1]);
char thirdLetter = std::tolower(parts[2]);

if ( secondLetter == 'm' && thirdLetter == 'p' )
{
  // ...
}
else if ( secondLetter == 'f' && thirdLetter == 's' )
{
  // ...
}

答案 3 :(得分:0)

您应该使用Convert a String In C++ To Upper Case中的一种方法将输入字符串更改为大写或小写,然后只需检查:

// convert parts to uppercase here
while (parts != "X")
{   
    if (parts.substr(1, 2) == "MP" )
    {
        cout << "Mail - Prioity" << endl << endl;
    }
    ...

注意:虽然你应该评论你的代码,但要评论明显的事情,例如这是if的开头(就像你不能从代码本身那里得到它)被认为是不好的做法。