C++ 在两个长度相同的字符串上循环切换大小写
我有一个开关盒,它在不同字符串的长度上循环: 意义 我面临的问题是,有两个字符串的长度相同6,因此我将有两个相同数字的案例C++ 在两个长度相同的字符串上循环切换大小写,c++,switch-statement,C++,Switch Statement,我有一个开关盒,它在不同字符串的长度上循环: 意义 我面临的问题是,有两个字符串的长度相同6,因此我将有两个相同数字的案例 switch(m_strScanned.GetLength(), X.GetAt(0)) // switch over String Length { case (6,2): // This case where the 6 digits are all numbers WTN: if (m_strScanned.Mid(2,1).FindOneOf(".,/*-+ABC
switch(m_strScanned.GetLength(), X.GetAt(0)) // switch over String Length
{
case (6,2): // This case where the 6 digits are all numbers
WTN: if (m_strScanned.Mid(2,1).FindOneOf(".,/*-+ABCDEFGHIJKLMNOPQRSTUVWXYZ")>=0) goto Y;
if(m_strScanned.Mid(3,1).FindOneOf(".")>=0) goto X;
else
{
....
break;
}
case (6,'P'):
goto TYPE; // this is where the first digit is P
TYPE: if(m_strScanned.Mid(2,1).FindOneOf("ABCDEFGHIJKLMNOPQRSTUVWXYZ")>=0)
goto Y;
if(m_strScanned.Mid(3,1).FindOneOf(".")>=0) goto X;
else
{
....
break;
}
案例6
案例6
第一种情况下的字符串总是以数字的形式出现,不包含任何字母/字符
第二种情况下的字符串总是以字符p开头
我想在这两种情况之间解除关系:我试图的是切换
(x.GetLength(),x.GetAt(0))
但它给出了一个错误,即case表达式不是常数
否则我不能有两个相同号码的箱子
switch(m_strScanned.GetLength(), X.GetAt(0)) // switch over String Length
{
case (6,2): // This case where the 6 digits are all numbers
WTN: if (m_strScanned.Mid(2,1).FindOneOf(".,/*-+ABCDEFGHIJKLMNOPQRSTUVWXYZ")>=0) goto Y;
if(m_strScanned.Mid(3,1).FindOneOf(".")>=0) goto X;
else
{
....
break;
}
case (6,'P'):
goto TYPE; // this is where the first digit is P
TYPE: if(m_strScanned.Mid(2,1).FindOneOf("ABCDEFGHIJKLMNOPQRSTUVWXYZ")>=0)
goto Y;
if(m_strScanned.Mid(3,1).FindOneOf(".")>=0) goto X;
else
{
....
break;
}
是否有一种解决方案可以避免其他情况
感谢您的帮助仅使用
开关
语句和大小写
标签没有解决方案,您必须有一个大小写
,然后在其中使用例如if
来选择正确的代码:
switch (m_strScanned.GetLength())
{
...
case 6:
if (m_strScanned[0] == 'P')
{
// Handle this special case
}
else
{
// Handle this other special case
}
break;
...
}
怎么了?哼。我很惊讶这个汇编。大小写标签需要是编译时可计算的常量表达式,但常量表达式不能包含逗号运算符 我认为,由于逗号运算符的工作方式,您的(因此非标准的)编译器将把
case(6,2)
视为case2
和switch(m_strScanned.GetLength(),X.GetAt(0))
视为switch(X.GetAt(0))
。甚至有可能(尽管我认为不太可能)有一个编译器扩展将案例(6,2):
视为案例6:case2:
等等。但是如果你利用它,那么你就放弃了可移植性
没有什么可以阻止您在
案例6
中使用if
块进行进一步的描述,或者完全放弃开关以使用if
块。为什么不让扫描仪返回枚举值而不是字符串?案例(6,2)
不应该编译(请参阅我的答案)。是吗?它没有错,但我想说的是,如果第一个字符是从A到Z的字母表之一,但是函数.FindOneOf(“ABC…Z”)在这种情况下没有帮助。你的意思是像If(x[0]>='A'&&x[0],而不是x[0],那么整个字符串x就是你要找的。如果它不在“A..Z”中,则//执行其他操作
,否则//执行操作
,但我想说的是,如果第一个字符是从A到Z的字母表中的一个,但函数.FindOneOf(“ABC…Z”)在这方面没有帮助case@HeshamMahmoud使用如何?
case 6:
if('P'==x[0]) {
// do something
}
else {
// do something else
}
break;