我正在尝试创建一个插入一串字符的程序,验证它,然后对其进行排序并打印出来。
我确定这里有一个明显的逻辑错误,有人可以帮忙指出来吗?我花了好几个小时盯着我的屏幕。在我对C ++的有限知识中,我尝试了所有我知道的东西,但我仍然无法使这件事发挥作用。
你能提供的任何东西都会以某种方式帮助我,即使它是居高临下的。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void mySort(string &s);
int main()
{
string str;
char c;
bool invalid = true;
cout<<"Please enter some alphabetical characters:"<<endl;
cout<<"(* to end input): ";
do
{
getline(cin, str, '*');
for(int i = 0; i < str.length(); i++)
{
c = str.at(i);
}
if(! ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) ) )
{
cout<<"Error!"<<endl;
}
else
{
(invalid==false);
cout<<"You entered: "<<str<<endl;
mySort(str);
}
} while(invalid==true);
system("PAUSE");
return(0);
}
void mySort(string &s)
{
sort(s.begin(), s.end());
cout<<"The string after sorting is: "<<s<<endl;
}
我几乎可以肯定验证的问题在于这一行:
if(! ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) ) )
我确定我的bool也是错误的。
任何东西,任何东西,因为这个原因,我浪费了几个小时的时间撞到了墙上。
答案 0 :(得分:5)
您永远不会将invalid
设置为true
以外的任何内容。
这一行:
(invalid==false);
应该是:
invalid = false;
以前的版本将 invalid
与false
进行比较,然后丢弃比较结果。什么都没有改变。
答案 1 :(得分:3)
(invalid==false);
应为invalid=false;
答案 2 :(得分:2)
首先改变:
(invalid == false);
invalid = false;
答案 3 :(得分:0)
正如其他人所说,您没有正确分配invalid
变量。您也没有正确验证输入字符串。循环遍历整个字符串,然后仅验证最后看到的字符,而不是在循环时验证每个字符。
我建议重新编写循环来摆脱invalid
变量并修复验证,例如:
int main()
{
string str;
char c;
do
{
cout << "Please enter some alphabetical characters:" << endl;
cout << "(* to end input): ";
if (!getline(cin, str, '*'))
break;
if (str.empty())
cout << "You did not enter anything!" << endl;
else if (str.find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") != string::npos)
cout << "Error! Bad input" << endl;
else
{
cout << "You entered: " << str << endl;
mySort(str);
break;
}
}
}
while (true);
system("PAUSE");
return 0;
}