C++程序:获取不同键盘布局输入的字符串


假设我们有两个字符串S和T,以及另一个字符串R。S和T代表两种流行的键盘布局,它们仅在字母位置上有所不同。所有其他键都是相同的。在S和T中,第一种和第二种布局的所有键都是按相同顺序排列的。R也可能包含数字。已知它是使用第一种布局输入的,但编写者打算使用第二种布局输入。我们必须找到保持第二种布局的字符串。(由于两种布局中除了字母之外的所有键都是相同的,因此字母的大小写应该保持不变,所有其他非字母字符也应该保持不变)。

问题类别

为了解决这个问题,我们需要操作字符串。编程语言中的字符串是存储在特定数组式数据类型中的字符流。几种语言将字符串指定为特定数据类型(例如Java、C++、Python);而其他几种语言将字符串指定为字符数组(例如C)。字符串在编程中非常重要,因为它们通常是各种应用程序中首选的数据类型,并用作输入和输出的数据类型。有各种字符串操作,例如字符串搜索、子串生成、字符串剥离操作、字符串转换操作、字符串替换操作、字符串反转操作等等。查看下面的链接,了解如何在C/C++中使用字符串。

https://tutorialspoint.com/cplusplus/cpp_strings.htm

https://tutorialspoint.com/cprogramming/c_strings.htm

因此,如果我们问题的输入类似于S = "qwertyuiopasdfghjklzxcvbnm"; T = "veamhjsgqocnrbfxdtwkylupzi"; R = "helloworld87nicecoding",则输出将为"xawwqeqmwr87zglalqrgzf"

步骤

为了解决这个问题,我们将遵循以下步骤:

res := an empty string
for initialize i := 0, when R[i] is not equal to 0, update (increase i by 1), do:
   x := 0
   for initialize j := 0, when j < 26, update (increase j by 1), do:
      if R[i] is same as S[j], then:
         res := res + T[j]
         x := 1
         Come out from the loop
      otherwise when R[i] + 32 is same as S[j], then:
         k := T[j] - 32
         res := res + k
         x := 1
         Come out from the loop
   if x is same as 0, then:
      res := res + R[i]
return res

示例

让我们来看下面的实现,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;
string solve(string S, string T, string R){
   int x;
   string res = "";
   for (int i = 0; R[i] != 0; i++){
      x = 0;
      for (int j = 0; j < 26; j++){
         if (R[i] == S[j]){
            res += T[j];
            x = 1;
            break;
         }
         else if (R[i] + 32 == S[j]){
            char k = T[j] - 32;
            res += k;
            x = 1;
            break;
         }
      }
      if (x == 0)
         res += R[i];
   }
   return res;
}
int main(){
   string S = "qwertyuiopasdfghjklzxcvbnm";
   string T = "veamhjsgqocnrbfxdtwkylupzi";
   string R = "helloworld87nicecoding";
   cout << solve(S, T, R) << endl;
}

输入

"qwertyuiopasdfghjklzxcvbnm", "veamhjsgqocnrbfxdtwkylupzi",
"helloworld87nicecoding"

输出

xawwqeqmwr87zglalqrgzf

更新于:2022年4月8日

400 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告