我正在编写一个应该接受字符串的程序,从字符串中删除所有空格和标点符号,然后将所有字符转换为大写并将它们递增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]++;
}
}
}
答案 0 :(得分:0)
我认为,在没有初始化的情况下将计数器i
发送到文本转换函数是个坏主意。
所以,第一个建议:在i
函数中初始化main
,或重写代码,以便不在i
,convert
等中发送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);