为什么我的c ++程序似乎挂起了

时间:2015-04-30 05:42:28

标签: c++ function encryption converter hang

我正在编写一个应该接受字符串的程序,从字符串中删除所有空格和标点符号,然后将所有字符转换为大写并将它们递增13个空格。希望我这样做的教授要求我使用函数来处理程序。我按照这个参数编写了它,但由于某些原因在输入一个句子后,例如'This is a line!',程序似乎只是挂断了。如果我一步一步地运行调试器,那么程序似乎运行正常。我不确定我哪里出错了,教授禁止我们向我们寻求同学的帮助。由于他没有在网上寻求帮助,我以为在找到这个网站之后我会转到这里。

我的节目:

#include <iostream>
#include <string>

using namespace std;

void convert(string text, int& i,int length);
void RemovePunc(string text, int& i,int length);
void RemoveSpac(string text, int& i,int length);
void MakeUpper(string text, int i,int length);

int main() 
{
    string text;
    int i;
    int length;


    cout << "Enter your text: ";
    getline(cin, text);

    length = (int)text.length();

    convert(text, i, length);

    return 0;
}

void convert(string text, int& i,int length)
{
    for(i = 0; i < length; i++) 
    {
        RemovePunc(text, i, length);
        RemoveSpac(text, i, length);
        MakeUpper(text, i, length);

    }
    cout << "Encrypted text:\n" << text << endl;
}

void RemovePunc(string text, int& i,int length)
{
    if (ispunct(text[i]))
        {
            text.erase(i--, 1);
            length = text.size();
        }
}

void RemoveSpac(string text, int& i,int length)
{
    if (isspace(text[i]))
        {
            text.erase(i--, 1);
            length = text.size();
        }
}

void MakeUpper(string text, int i,int length)
{
    if (isalpha(text[i])) 
        {
            text[i] = toupper(text[i]);

            for (int counter = 0; counter < 13; counter++) 
            {
                if (text[i] == 'Z')
                    text[i] = 'A';
                else
                    text[i]++;

            }
        }
}

1 个答案:

答案 0 :(得分:0)

我认为,在没有初始化的情况下将计数器i发送到文本转换函数是个坏主意。

所以,第一个建议:在i函数中初始化main,或重写代码,以便不在iconvert等中发送RemovePunc

第二个建议是关于将字符串发送到文本转换函数:像void convert(string text, int& i,int length);这样的函数会生成一个文本副本来处理内部数据,而不会更改外部数据。您的函数必须更改text,因此最好使用指向字符串或引用的指针,如:

 void convert(string &text, int& i,int length);
 void RemovePunc(string &text, int& i,int length);
 void RemoveSpac(string &text, int& i,int length);
 void MakeUpper(string &text, int i,int length);