C++ 如何将switch语句一次使用3个字符?
我有一系列不同的3个字母的单词:C++ 如何将switch语句一次使用3个字符?,c++,string,stl,C++,String,Stl,我有一系列不同的3个字母的单词: catdogmattabratliematdogatt 我需要为每个单词分配一个字母表并打印最后的字符串 cat: P, dog: A, mat: T, tab: I, rat: E, lie: O, att: L 因此,我的输出应该是: PATIEOTAL 我尝试使用switch语句,但它不允许我同时输入3个字符。使用映射执行以下操作: map<string, char> wordToChar; // Load wordToChar appr
catdogmattabratliematdogatt
我需要为每个单词分配一个字母表并打印最后的字符串
cat: P, dog: A, mat: T, tab: I, rat: E, lie: O, att: L
因此,我的输出应该是:
PATIEOTAL
我尝试使用switch语句,但它不允许我同时输入3个字符。使用映射执行以下操作:
map<string, char> wordToChar;
// Load wordToChar appropriately; c++11 you can use an initializer list for simplicity
for (int i = 0; i < strLen; i += 3)
{
string str;
str.push_back(theString[i]);
str.push_back(theString[i+1]);
str.push_back(theString[i+2]);
cout << wordToChar[theString] << endl;
}
map-wordToChar;
//适当加载wordToChar;为了简单起见,您可以使用初始值设定项列表
对于(int i=0;imap
执行以下操作:
map<string, char> wordToChar;
// Load wordToChar appropriately; c++11 you can use an initializer list for simplicity
for (int i = 0; i < strLen; i += 3)
{
string str;
str.push_back(theString[i]);
str.push_back(theString[i+1]);
str.push_back(theString[i+2]);
cout << wordToChar[theString] << endl;
}
map-wordToChar;
//适当地加载wordToChar;为了简单起见,c++11可以使用初始值设定项列表
对于(int i=0;i cout看来我可以在一个开关-语句中使用三个char
!这也不仅仅是我,而是一个称为“多字符文字”的标准特性(参见2.14.3[lex.ccon]第1段;这些野兽的类型是int
)。我并不是建议任何人使用这种方法,但它是有效的,尽管字符在计算中可能需要反转,这取决于系统的长度(我不确定细节)。下面是一个完整的示例(尽管输入需要单独的单词,而不是需要分开的字符串):
#包括
#包括
int main(int ac,char*av[])
{
typedef无符号字符u;
for(int i(1);i!=ac;++i){
if(strlen(av[i])==3)
{
std::cout似乎我可以在开关-语句中使用三个char
!它也不仅仅是我,而是一个称为“多字符文字”的标准特性(参见2.14.3[lex.ccon]第1段;这些野兽的类型是int
)。我并不是建议任何人使用这种方法,但它是有效的,尽管字符在计算中可能需要反转,这取决于系统的长度(我不确定细节)。下面是一个完整的示例(尽管输入需要单独的单词,而不是需要分开的字符串):
#包括
#包括
int main(int ac,char*av[])
{
typedef无符号字符u;
for(int i(1);i!=ac;++i){
if(strlen(av[i])==3)
{
std::cout既然您询问如何使用switch语句,我认为可以接受一个硬编码的3个字母单词及其对应字母的列表。在这种情况下,我将使用一系列if-then-else语句来解决这个问题,每个语句都试图匹配3个字母单词的字符。或者,您可以se嵌套了switch语句,但语法使该解决方案更难阅读
static char match_word(std::string const &str, std::size_t offset)
{
char ret = '?';
if (str[offset + 0] == 'c' && str[offset + 1] == 'a' && str[offset + 2] == 't') {
ret = 'P';
}
else if (str[offset + 0] == 'd' && str[offset + 1] == 'o' && str[offset + 2] == 'g') {
ret = 'A';
}
else if (str[offset + 0] == 'm' && str[offset + 1] == 'a' && str[offset + 2] == 't') {
ret = 'T';
}
else if (str[offset + 0] == 't' && str[offset + 1] == 'a' && str[offset + 2] == 'b') {
ret = 'I';
}
else if (str[offset + 0] == 'r' && str[offset + 1] == 'a' && str[offset + 2] == 't') {
ret = 'E';
}
else if (str[offset + 0] == 'l' && str[offset + 1] == 'i' && str[offset + 2] == 'e') {
ret = 'O';
}
else if (str[offset + 0] == 'a' && str[offset + 1] == 't' && str[offset + 2] == 't') {
ret = 'L';
}
return ret;
}
然后,您可以使用以下简单的主函数测试代码:
int main(int argc, char **argv)
{
if (argc != 2) {
std::cerr << "USAGE: " << argv[0] << " ENCODED" << std::endl;
return 1;
}
else {
std::string example(argv[1]);
for (std::size_t idx = 0; idx < example.size(); idx += 3) {
std::cout << match_word(example, idx);
}
std::cout << std::endl;
return 0;
}
}
$ ./a.out catdogmattabratliematdogatt
PATIEOTAL
既然您询问过如何使用switch语句,我认为可以接受一个硬编码的3个字母单词及其对应字母的列表。在这种情况下,我将使用一系列if-then-else语句来解决这个问题,每个语句都试图匹配3个字母单词的字符。或者,您可以使用嵌套语句switch语句,但语法使该解决方案更难阅读
static char match_word(std::string const &str, std::size_t offset)
{
char ret = '?';
if (str[offset + 0] == 'c' && str[offset + 1] == 'a' && str[offset + 2] == 't') {
ret = 'P';
}
else if (str[offset + 0] == 'd' && str[offset + 1] == 'o' && str[offset + 2] == 'g') {
ret = 'A';
}
else if (str[offset + 0] == 'm' && str[offset + 1] == 'a' && str[offset + 2] == 't') {
ret = 'T';
}
else if (str[offset + 0] == 't' && str[offset + 1] == 'a' && str[offset + 2] == 'b') {
ret = 'I';
}
else if (str[offset + 0] == 'r' && str[offset + 1] == 'a' && str[offset + 2] == 't') {
ret = 'E';
}
else if (str[offset + 0] == 'l' && str[offset + 1] == 'i' && str[offset + 2] == 'e') {
ret = 'O';
}
else if (str[offset + 0] == 'a' && str[offset + 1] == 't' && str[offset + 2] == 't') {
ret = 'L';
}
return ret;
}
然后,您可以使用以下简单的主函数测试代码:
int main(int argc, char **argv)
{
if (argc != 2) {
std::cerr << "USAGE: " << argv[0] << " ENCODED" << std::endl;
return 1;
}
else {
std::string example(argv[1]);
for (std::size_t idx = 0; idx < example.size(); idx += 3) {
std::cout << match_word(example, idx);
}
std::cout << std::endl;
return 0;
}
}
$ ./a.out catdogmattabratliematdogatt
PATIEOTAL
可能会有帮助:可能会有更多帮助:可能会有帮助:可能会有更多帮助:我尝试使用map,但它按字母顺序对我的键进行排序,但没有给出所需的output@sumrania:排序的键如何导致问题?我刚刚添加了一个新词correlation,其中att:L。使用映射时,它首先替换所有att,然后替换ca然后是dog。所以我的输出变成:PAmLabEOAL@Rollie:还有一种可能性:您可以这样做:string str(字符串+i,3);
。另外,map
不会重载operator()
,而是重载operator[]
,所以您希望cout@sumrania这可能是您的替换算法的一个更大的问题-您可以发布您正在使用的代码吗?我尝试使用map,但它按字母顺序对我的键进行排序,但没有给出所需的output@sumrania:排序键如何导致问题?我刚刚添加了一个新词correlation,其中att:L。当使用地图时,它首先替换所有ATT,然后是cat,然后是dog。因此,我的输出变成:PAmLabEOAL@Rollie:还有一种可能性:您可以这样做:string str(字符串+i,3);
。另外,map
不会重载operator()
,而是重载operator[]
,所以您希望cout@sumrania更像是您的替换算法的问题-您可以发布您正在使用的代码吗?