C++ 检查IX或IV后面是否有其他字符
我有一个算法,它应该取一个名为C++ 检查IX或IV后面是否有其他字符,c++,arrays,string,C++,Arrays,String,我有一个算法,它应该取一个名为str的字符串,并根据定义为以下内容的特定规则进行检查: 在第九节或第四节之后没有任何内容。 如果规则没有被破坏,它将打印为合法,如果规则被破坏,它将打印为非法 以下是我创建的代码: string str = "MXCIVXX"; int length = str.length(); bool legal = true; for (int i = 0; i < length; i++) { if ((str[i] == 'I' && s
str
的字符串,并根据定义为以下内容的特定规则进行检查:
在第九节或第四节之后没有任何内容。
如果规则没有被破坏,它将打印为合法,如果规则被破坏,它将打印为非法
以下是我创建的代码:
string str = "MXCIVXX";
int length = str.length();
bool legal = true;
for (int i = 0; i < length; i++) {
if ((str[i] == 'I' && str[i + 1] == 'X') && (str[i + 2] != '/0'))
legal = false;
if ((str[i] == 'I' && str[i + 1] == 'V') && (str[i + 2] != '/0'))
legal = false;
}
if (legal == true)
cout << "Legal" << endl;
else if (legal == false)
cout << "Illegal" << endl;
string str=“MXCIVXX”;
int length=str.length();
bool-legal=true;
for(int i=0;i cout您的意思是空字符,因此'\0'
而不是'/0'
此外,您的方法也不准确(请阅读下面的评论并感谢)。这种方法应能更好地发挥作用:
int main()
{
std::string str = "IX";
int size = str.size();
bool legal = true;
if (str[size - 2] == 'I') // the char before the last char
{
if (str[size - 1] == 'V' || str[size - 1] == 'X') // the last char
legal = true;
else
legal = false;
}
else
legal = false;
if (legal)
std::cout << "Legal" << std::endl;
else
std::cout << "Illegal" << std::endl;
getchar();
return 0;
}
intmain()
{
std::string str=“IX”;
int size=str.size();
bool-legal=true;
if(str[size-2]='I')//最后一个字符之前的字符
{
if(str[size-1]='V'| | str[size-1]=='X')//最后一个字符
合法=真实;
其他的
合法=虚假;
}
其他的
合法=虚假;
国际单项体育联合会(法律)
std::cout您指的是空字符,因此'\0'
而不是'/0'
此外,您的方法也不准确(请阅读以下评论并感谢)。这种方法应该更有效:
int main()
{
std::string str = "IX";
int size = str.size();
bool legal = true;
if (str[size - 2] == 'I') // the char before the last char
{
if (str[size - 1] == 'V' || str[size - 1] == 'X') // the last char
legal = true;
else
legal = false;
}
else
legal = false;
if (legal)
std::cout << "Legal" << std::endl;
else
std::cout << "Illegal" << std::endl;
getchar();
return 0;
}
intmain()
{
std::string str=“IX”;
int size=str.size();
bool-legal=true;
if(str[size-2]='I')//最后一个字符之前的字符
{
if(str[size-1]='V'| | str[size-1]=='X')//最后一个字符
合法=真实;
其他的
合法=虚假;
}
其他的
合法=虚假;
国际单项体育联合会(法律)
std::cout要检查“IX”或“IV”是否存在,如果存在,则它位于字符串的末尾,您可以使用并检查它是否返回位于字符串末尾的位置
std::string bad_str = "MXCIVXX";
我们使用find
like
std::size_t pos = bad_str.find("IV");
然后,pos
要么是std::string::npos
表示未找到任何内容,要么是找到“IV”的位置。您可以使用
if (pos == std::string::npos || pos == bad_str.size() - 2)
std::cout << "good\n";
else
std::cout << "bad\n";
if(pos==std::string::npos | | pos==bad_str.size()-2)
std::cout要检查“IX”或“IV”是否存在,如果存在,则它位于字符串的末尾,您可以使用并检查它是否返回位于字符串末尾的位置
std::string bad_str = "MXCIVXX";
我们使用find
like
std::size_t pos = bad_str.find("IV");
然后,pos
要么是std::string::npos
表示未找到任何内容,要么是找到“IV”的位置。您可以使用
if (pos == std::string::npos || pos == bad_str.size() - 2)
std::cout << "good\n";
else
std::cout << "bad\n";
if(pos==std::string::npos | | pos==bad_str.size()-2)
std::cout您可以尝试以下代码来处理类似“MIXCIXXIV”的情况:
String str=“MXCIVXX”;
int length=str.length();
bool-legal=true;
对于(int i=0;ii+2){
合法=虚假;
打破
}
如果((str[i]='i'&&str[i+1]='V')&&length>i+2){
合法=虚假;
打破
}
}
如果(合法==真)
cout您可以尝试以下代码来处理类似“MIXCIXXIV”的情况:
String str=“MXCIVXX”;
int length=str.length();
bool-legal=true;
对于(int i=0;ii+2){
合法=虚假;
打破
}
如果((str[i]='i'&&str[i+1]='V')&&length>i+2){
合法=虚假;
打破
}
}
如果(合法==真)
不能“在第九次或第四次之后就没有了…”什么都不定义,你是说只有空格?行尾?没有其他罗马数字?一步一步地调试它,看看为什么会发生这种情况。这就是当你的程序不工作时应该做的。后面没有其他字符。最后两个字符是IX或IV。请注意,'/0'
与有很大的不同de>“\0”
“在IX或IV之后没有任何内容…”什么都不定义,你是说只有空格?行尾?没有其他罗马数字?一步一步地调试它,看看为什么会发生这种情况。这就是当你的程序不工作时应该做的。后面没有其他字符。最后两个字符是IX或IV。请注意,'/0'
与有很大的不同de>'\0'
std::string::find
是您的朋友。您不需要str[i]…&&str[i+1]…
业务。在许多情况下,这将超过数组的结尾。它将中断@nathan。它与“MXCIX”
或“IV”一起工作
请您解释一下好吗?UB不一定不起作用。拥有它是个坏主意。如果字符串以IX或IV结尾,那么str[i+2]!='\0'
将超过字符串的结尾,是UB。字符串“IV”只有有效的索引0和1。std::string::find
是您的朋友。您不需要str[i]…&&str[i+1]…
业务。在许多情况下,这将超过数组的末尾。它将破坏@nathan。它与“MXCIX”
或“IV”
一起工作。请您解释更多信息好吗?UB不一定不工作。拥有它只是一个坏主意。如果字符串以IX或IV结尾,则str[i+2]!='\0'
将超过字符串的结尾并为UB。字符串“IV”只有0和1的有效索引。