首页 > 解决方案 > 如何制作一个终端应用程序来编码和解码具有 2 个参数、abc 和 coderkey abc 的字符串

问题描述

它给出一个错误(分段错误,核心转储),除非我用这样的字符串提供它:abcdefghijk。我必须从 A 开始,然后继续使用字母。长度无关紧要。我刚开始使用 c++,我什至不知道分段错误(核心转储)是什么意思。如果您有任何解决方案,请告诉我。:3

#include<iostream>
using namespace std;
void code(string word)
{
    char abc[] = {'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'};
    char sabc[] = {'z','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'};
    int ilist[word.size()];
    char elist[word.size()];
    for(int iw = 0; iw < word.size(); iw++)
    {
        for (int ic = 0; ic < 26; ic++)
        {
            if(word[iw] == abc[ic])
            {
                ilist[ic] = iw;
            }else
            {
                continue;
            }
        }  
    }
    for(int i = 0; i < word.size(); i++)
    {
        elist[i] = sabc[ilist[i]];
    }
    for(int f = 0; f < word.size(); f++)
    {
       cout << elist[f];
    }
    cout << endl;
}
void decode(string word)
{
    string sabc = {'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'};
    string abc = {'z','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'};
    int ilist[word.size()];
    char elist[word.size()];
    for(int iw = 0; iw < word.size(); iw++)
    {
        for (int ic = 0; ic < 26; ic++)
        {
            if(word[iw] == abc[ic])
            {
                ilist[ic] = iw;
            }else
            {
                continue;
            }
        }  
    }
    for(int i = 0; i < word.size(); i++)
    {
        elist[i] = sabc[ilist[i]];
    }
    for(int f = 0; f < word.size(); f++)
    {
        cout << elist[f];
    }
    cout << endl;
}
int main()
{
    int todo;
    string todowith;
    cout << "P||1 = CODE\nP||2 = DECODE\nP||WHAT TO DO?: ";
    cin >> todo;
    if(todo == 1)
    {
        cout << "P||WHAT TO CODE?: ";
        cin >> todowith;
        code(todowith);
    }else if(todo == 2)
    {
        cout << "P||WHAT TO DECODE?: ";
        cin >> todowith;
        decode(todowith);
    }else
    {
        cout << "P||THERE IS NO OPTION: " << todo << endl;
        return 1;
    }
    return 0;
}

"""

标签: c++

解决方案


ilist[ic] = iw; Ic 达到 25,但没有保证 ilist -length=word.size- 有 26 个元素。所以它超出了界限,这给出了你看到的异常。

顺便说一下,尝试使用 std::vector 而不是 VLA。


推荐阅读