检查字符串是否可以使用 Qwerty 键盘的同一行打印

data structurec++server side programmingprogramming

简介

在本教程中,我们将检查是否可以使用 Qwerty 键盘同一行中的字符形成输入字符串。任务是检查给定的字符串是否存在于 Qwerty 键盘的单行中。要确定字符串是否可以用 Qwerty 键盘的同一行打印,所有字符都应位于同一行。我们实施了一种使用 set 和 unordered_set 的方法来解决此任务。不同行的字符存储在不同的集合或 unordered_set 中。将字符串字符与每个存储的行值进行比较。

Qwerty 键盘是所有计算机、笔记本电脑和打印机的标准键盘。 Qwerty 键盘上的字符是专门为快速打字而设计的。

示例 1

String = "qwerty"

输出

是的,该字符串存在于 qwerty 键盘的同一行中。

解释

输入字符串为"qwerty",该字符串可以由 qwerty 键盘第一行的字符组成。输入字符串的每个字符都存在于同一行中。因此,可以使用 qwerty 键盘的同一行打印该字符串。

示例 2

String = "hello"

输出

不,该字符串不存在于 qwerty 键盘的同一行。

解释

输入字符串为"hello",无法使用 qwerty 键盘的同一行打印。输入字符串的字符存在于不同的行。因此,输出为否。

C++ 库函数

  • Unordered_set − 它是 C++ 中的数据结构。它是一种集合(有序和无序集合),它以无序(不以任何排序方式)存储元素。

unordered_set <data_type> unordered_set_name;
  • set − 它是一个容器,用于存储特定数据类型的不同元素。集合以某种排序顺序存储元素,每个元素由于其标识符而唯一。它不允许重复元素。

set<data_type> set_name;
  • length() − 它是一个字符串类库函数,在 <string> 头文件中定义。它以字节为单位返回输入字符串的长度。

string_name.length();
  • set.count() − 它是集合的预定义函数。它计算某个值与集合中存储的元素匹配的次数。如果在集合中找到某个元素,则返回 1,否则返回 0。

set_name.count();

算法

  • 初始化输入字符串的值。

  • 将每行的字符存储在不同的集合中。

  • 使用 if-else 条件将字符串与集合的每个元素进行比较。

  • 如果所有字符串字符都存在于同一集合中,则输出为 Yes。

  • 否则,输出为 No。

  • 打印输出。

示例 1

我们使用多个集合在 C++ 中实现本教程的问题陈述。同一行的字符存储在一个集合中,元素存储在三个不同的集合中。将输入字符串的字符与每个集合中的元素进行比较。

#include <bits/stdc++.h>
using namespace std;
// 用户定义函数,用于检查字符串是否存在于 qwerty 键盘的同一行中
int checkString(char c){
   // 将 qwerty 键盘不同行的元素存储在不同的集合中
   set<char> row_1 = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=' };
   set<char> row_2 = { 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '[', ']', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p' };
   set<char> row_3 = { 'A', 'S', 'D', 'F', 'G','H', 'J', 'K', 'L', ';', ':', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l' };
   set<char> row_4 = { 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/', 'z', 'x', 'c', 'v', 'b', 'n', 'm' };
   if (row_1.count(c) > 0) 
      return 1;
   else if (row_2.count(c) > 0) 
      return 2;
   else if (row_3.count(c) > 0) 
      return 3;
   else if (row_4.count(c) > 0) 
      return 4;
   return 0;   
}
// 函数检查输入的字符串是否与 qwerty 键盘的同一行字符匹配
bool checkStringExist(string s)  {
   char c = s[0];
   int rowValue = checkString(c);
   for (int x = 0; x < s.length(); x++)   {
      c = s[x];
      if (rowValue != checkString(c))
         return false;}
      return true; 
}
int main() {
    string s = "qwerty";
    if (checkStringExist(s))
        cout << "是的,可以使用 qwerty 键盘的同一行打印字符串。";
    else
        cout << "否,可以使用 qwerty 键盘的同一行打印字符串。";
    return (0);
}

输出

是的,可以使用 qwerty 键盘的同一行打印字符串。

示例 2

在此问题陈述的 C++ 实现中,我们使用多个 unordered_set 来存储 Qwerty 键盘不同行的值。行中的所有字符均为小写。如果字符串包含大写字符,则将其转换为小写。

#include <iostream>
#include <unordered_set>
#include <cctype>
using namespace std;

//用户定义函数,用于检查是否可以使用与 qwerty 键盘相同的 roe 打印字符串
bool checkString(const string& s) {
    // 使用不同的 unordered_set 来存储元素
    unordered_set<char> row1 = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'};
    unordered_set<char> row2 = {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'};
    unordered_set<char> row3 = {'z', 'x', 'c', 'v', 'b', 'n', 'm'};
    
    // 识别字符串字符的行
    char stringChar = tolower(s[0]);
    unordered_set<char>* rowValues;
    if (row1.count(stringChar))
        rowValues = &row1;
    else if (row2.count(stringChar))
        rowValues = &row2;
    else if (row3.count(stringChar))
        rowValues = &row3;
    else
        return false;
    
    // 检查字符串的所有字符是否存在于同一行
   for (char c : s) {
      if (tolower(c) != stringChar && !rowValues->count(tolower(c)))
         return false;
   }

   return true;
}

//代码控制器
int main() {
    string s = "Qwert"; // 预定义字符串
    
    //调用函数
    if (checkString(s))
        cout << "是的,可以使用 QWERTY 键盘的同一行打印字符串。" << endl;
    else
        cout << "不,不能使用 QWERTY 键盘的同一行打印字符串。" << endl;
    
    return 0;
}

输出

是的,可以使用 QWERTY 键盘的同一行打印字符串。

结论

我们已经到了本教程的结尾。我们已经实现了一种方法来检查是否可以使用 Qwerty 键盘同一行中的字符打印输入字符串。只有当所有字符都存在于一行中时,才能从 Qwerty 键盘的同一行打印字符串。将不同行的值存储在 set 和 unordered_set 中并比较字符串字符。我们用演示来详细说明本教程问题陈述的含义。


相关文章