-3

我正在尝试创建一个函数,该函数从标准输入读取字符串并将其存储在字符向量中,并将特殊字符 -(@) 的位置存储在整数向量中。假设输入将仅包含小写字母和特殊字符,即“@”。字符向量和整数向量都是全局的。我不知道为什么会出现运行时错误。这是我的代码:-

vector<int> v;
vector<char> s;

inline int input()                //called in main when we have to read input
{
    char p=getchar();
    register int i=0;
    while((p>='a'&&p<='z')||(p=='@'))  
    {
        s.push_back(p);
        if (p=='@')
        {
            v.push_back(i);
        }
        p=getchar();
        i++;
    }

    return 0;
}
4

2 回答 2

1

如果您将在运行时遇到的错误的性质描述出来,将会有所帮助。如果您提供导致此错误的输入示例,也会有所帮助。

一些观察,可能会给你一些关于错误原因的指示:

  • 您的向量是全局变量。如果您将它们传递给函数并且不将它们存储在全局范围内会更好。这将使您能够更好地跟踪它们被访问和更改的位置,这将使您的代码更易于维护。
  • 在函数开始时两个向量都不会被清除,因此将通过后续调用继续建立。这可能是也可能不是您想要做的。
  • 如果您不键入小写字母或“@”,该函数将提前终止。这看起来是故意的,但当然任何标点符号、大写字母、数字或空格都会导致提前终止。
  • 您总是从函数返回 0。如果函数不是为了返回值而编写的,则应将其声明为 void。

我还将删除您对 inline 和 register 的使用,这不太可能给您带来任何明显的速度提升。

于 2013-06-09T16:08:01.403 回答
1

而((p>='a'&&p<='z')||(p=='@))

你没有'@'

于 2013-06-09T14:03:17.750 回答