【问题标题】:How do I swap chars of a whole sentence with user input in C++?如何在 C++ 中将整个句子的字符与用户输入交换?
【发布时间】:2015-08-11 08:42:03
【问题描述】:

我想从用户那里获取输入

char input[200];

然后我想根据

交换那个输入的每个字符
a='y'; b='b'; c='j'; d='m'; e='x'; f='f'; g='w'; h='i';
i='v'; j='c'; k='l'; l='u'; m='t'; n='a'; o='k'; p='h';
q='d'; r='p'; s='s'; t='n'; u='z'; v='q'; w='e'; x='r';
y='o'; z='g';

例如,如果输入是

hello

输出将是

ixuuk

我想使用 for 循环和数组在 C++ 中编写代码。

【问题讨论】:

  • 输入也可以有空格。
  • 您自己是否先搜索过解决方案?
  • 切换/大小写,使用 char 值来处理具有太多梯级的查找表、if/else 阶梯。其他东西。
  • @KABoissonneault 是的,我已经搜索了解决方案,但根本找不到任何线索。

标签: c++ loops chars


【解决方案1】:

我建议你使用嵌套循环。 创建一个包含所有字母的字符串数组。 然后创建另一个字符串数组,其中包含您想要以相同字母顺序更改的所有字符。

    #include <iostream>
    using namespace std;
    int main()
    {
        string alphabets="abcdefghijklmnopqrstuvwxyz" , 
        cipher="ybjmxfwivclutakhdpsnzqerog" , word , newword="" ;
        cin>>word;
        newword=word;
        for(int i=0;i<26;i++)
        {
            for(int j=0;j<26;j++)
            {
                if(word[i]==alphabets[j])
                {
                    newword[i]=cipher[j];
                    break;
                }
            }
        }
        cout<<newword;
        return 0;
    }

【讨论】:

    【解决方案2】:

    解决了问题

    #include <iostream>
    #include <cstring>
    #include <utility>
    
    int main() 
    {
        std::pair<const char *, const char *> 
    
    cipher ("abcdefghijklmnopqrstuvwxyz",   
            "ybjmxfwivclutakhdpsnzqerog");
    
    
    
        const size_t N = 200;
        char input[N];
        input[0] = '\0';
    
        std::cin.getline( input, sizeof( input ) );
    
        std::cout << '\"' << input << '\"' << std::endl;
    
        for ( char *p = input; *p; ++p )
        {
            if ( const char *q = std::strchr( cipher.first, *p ) )
            {
                *p = cipher.second[q - cipher.first];
            }
        }
    
        std::cout << '\"' << input << '\"' << std::endl;
        return 0;
    }
    

    特别感谢来自莫斯科的@Vlad

    【讨论】:

      【解决方案3】:

      这是一个演示程序,展示了它是如何完成的

      #include <iostream>
      #include <cstring>
      #include <utility>
      
      int main() 
      {
          std::pair<const char *, const char *> cipher =
          {
              "abcdefghijklmnopqrstuvwxyz",   
              "ybjmxfwivclutakhdpsnzqerog"    
          };
      
          const size_t N = 200;
          char input[N];
          input[0] = '\0';
      
          std::cin.getline( input, sizeof( input ) );
      
          std::cout << '\"' << input << '\"' << std::endl;
      
          for ( char *p = input; *p; ++p )
          {
              if ( const char *q = std::strchr( cipher.first, *p ) )
              {
                  *p = cipher.second[q - cipher.first];
              }
          }
      
          std::cout << '\"' << input << '\"' << std::endl;
          return 0;
      }
      

      程序输出是

      "Hello"
      "Hxuuk"
      

      您还可以使用函数tolowertoupper 将源字符串的初始字符转换为某种大小写。

      【讨论】:

      • prntscr.com/7arano 我明白了,但停留在一行代码上。请参阅上面链接和响应的屏幕截图。问候
      • @Asad Jamal Malik 很抱歉,我没有看屏幕截图。
      • 好吧,C++ 98 'cipher' 中的 [Error] 必须由构造函数初始化,而不是由 '{...}' 初始化
      • @Asad Jamal Malik 可能是你有一个旧的编译器。在密码的定义中,用括号替换大括号,例如 std::pair cipher ("abcdefghijklmnopqrstuvwxyz", "ybjmxfwivclutakhdpsnzqerog");请注意,赋值运算符已被删除。
      【解决方案4】:

      我建议你使用查找数组:

      char output = conversion[input_char];
      

      您可以使用一些算术将数组简化为 26 个字母:

      char output = conversion[input_char - 'a'];
      

      表达式input_char - 'a' 使字母a 引用conversion 数组中的第一个槽。

      这是数组的一个例子:

      static const char conversion[] =
      {'b', 'y', 'c', 'k', 'f', /*...*/, 'a'};
      

      使用上面的代码,如果输入为a,则输出为b。对于b 的输入,输出将为y,依此类推。

      无需更换。请记住,交换会更改值。我相信您想要 conversiontranslation

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多