我参加了我的第一个编码课,而且我遇到了障碍。我正在编写一个程序,需要在一组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,我会收到错误消息。关于如何解决这个问题的任何建议?
答案 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
的开头(就像你不能从代码本身那里得到它)被认为是不好的做法。