如何将字符串char与结构数组进行比较?

问题描述 投票:-1回答:1

我的目标是把一个用户归纳的字符串变成Tap codeKnock代码。https:/en.wikipedia.orgwikiTap_code。

我遇到的问题是,我不知道如何将我从字符串中得到的字符与结构数组进行比较。

我想读取字符串中的一个字母,然后将其与结构数组进行比较。因此,如果我输入字母 "a",代码会将其与数组进行比较,然后输出分配给该字母的相应行和列,在本例中是1 1。

怎么做才能比较这两个东西呢?

这里必须使用Struct。

(编程新手)

#include <iostream>
#include <string>

using namespace std;

struct letter
{
    int row;
    int column;
};

int main()
{
    int x1 = 0;
    string input;

    letter a; a.row = 1; a.column = 1;
    letter b; b.row = 1; b.column = 2;
    letter c; c.row = 1; c.column = 3;
    letter d; d.row = 1; d.column = 4;
    letter e; e.row = 1; e.column = 5;

    letter f; f.row = 2; f.column = 1;
    letter g; g.row = 2; g.column = 2;
    letter h; h.row = 2; h.column = 3;
    letter i; i.row = 2; i.column = 4;
    letter j; j.row = 2; j.column = 5;

    letter k; k.row = 1; k.column = 3;

    letter l; l.row = 3; l.column = 1;
    letter m; m.row = 3; m.column = 2;
    letter n; n.row = 3; n.column = 3;
    letter o; o.row = 3; o.column = 4;
    letter p; p.row = 3; p.column = 5;

    letter q; q.row = 4; q.column = 1;
    letter r; r.row = 4; r.column = 2;
    letter s; s.row = 4; s.column = 3;
    letter t; t.row = 4; t.column = 4;
    letter u; u.row = 4; u.column = 5;

    letter v; v.row = 5; v.column = 1;
    letter w; w.row = 5; w.column = 2;
    letter x; x.row = 5; x.column = 3;
    letter y; y.row = 5; y.column = 4;
    letter z; z.row = 5; z.column = 5;

    struct letter arr[26] = {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z };

    cout << "Input string using only small letters.\n";
    getline(cin, input);

    int length = input.size();

    for (int x = 0; x < length; x++)
    {
        do
        {
            x1++;
        }
        while (input[x] != arr[x1]); ////////////////////////////This

    }
}
1>------ Build started: Project: labwokrk4, Configuration: Debug Win32 ------
1>labwokrk4.cpp
1>C:\Users\lietotajs\Desktop\corse work\labwokrk4\labwokrk4.cpp(62,29): error C2678: binary '!=': no operator found which takes a left-hand operand of type 'char' (or there is no acceptable conversion)
1>C:\Program Files (x86)\visual basic temp\VC\Tools\MSVC\14.23.28105\include\system_error(253,24): message : could be 'bool std::operator !=(const std::error_condition &,const std::error_condition &) noexcept'
1>C:\Program Files (x86)\visual basic temp\VC\Tools\MSVC\14.23.28105\include\system_error(248,24): message : or       'bool std::operator !=(const std::error_condition &,const std::error_code &) noexcept'
1>C:\Program Files (x86)\visual basic temp\VC\Tools\MSVC\14.23.28105\include\system_error(243,24): message : or       'bool std::operator !=(const std::error_code &,const std::error_condition &) noexcept'
1>C:\Program Files (x86)\visual basic temp\VC\Tools\MSVC\14.23.28105\include\system_error(238,24): message : or       'bool std::operator !=(const std::error_code &,const std::error_code &) noexcept'
1>C:\Program Files (x86)\visual basic temp\VC\Tools\MSVC\14.23.28105\include\exception(302,24): message : or       'bool std::operator !=(const std::exception_ptr &,std::nullptr_t) noexcept'
1>C:\Program Files (x86)\visual basic temp\VC\Tools\MSVC\14.23.28105\include\exception(298,24): message : or       'bool std::operator !=(std::nullptr_t,const std::exception_ptr &) noexcept'
1>C:\Program Files (x86)\visual basic temp\VC\Tools\MSVC\14.23.28105\include\exception(294,24): message : or       'bool std::operator !=(const std::exception_ptr &,const std::exception_ptr &) noexcept'
1>C:\Users\lietotajs\Desktop\corse work\labwokrk4\labwokrk4.cpp(62,29): message : while trying to match the argument list '(char, letter)'
1>Done building project "labwokrk4.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
c++ arrays structure
1个回答
0
投票

其实没有必要在数组中循环寻找匹配的字母。你可以使用字符算术将输入的字母转化为你的Tap Code数组的索引。

这可能看起来像。

for (int x = 0; x < length; x++)
{
    if(std::isalpha(static_cast<unsigned char>(input[x]))) { // If it's not a letter, don't bother
        continue;
    }
    int indx = std::tolower(static_cast<unsigned char>(input[x])) - 'a'; // Transform into index
    letter tap = arr[indx];
    // Do Tap Code stuff...
}
© www.soinside.com 2019 - 2024. All rights reserved.