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
广告