gets()和cin.getline()读入字符串的效率问题

时间:2022-10-03 19:02:13
题目来源HOJ  1048

之前代码  Time Limit Exceeded 1048 1000MS 260K 674 B C++ 

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char s[20],e[20],str[200];
    int len;
    while(cin>>s,strcmp(s,"ENDOFINPUT")!=0)
    {
        if(strcmp(s,"START")==0)
        {
            getchar();
            cin.getline(str,100);
            while(cin>>e)
            {
                if(strcmp(e,"END")==0)
                    break;
            }
        }
        else continue;
        len=strlen(str);
        for(int i=0;i<len;i++)
        {
            if(str[i]>='A'&&str[i]<='Z')
            {
                if(str[i]=='A') str[i]='V';
                else if(str[i]=='B') str[i]='W';
                else if(str[i]=='C') str[i]='X';
                else if(str[i]=='D') str[i]='Y';
                else if(str[i]=='E') str[i]='Z';
                else str[i]-=5;
            }
        }
        cout<<str<<endl;
    }
    return 0;
}


之后修改后的代码:Accepted 1048 0MS 376K 652 B C++ 


#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s[100],e[100],str[100000];
int len;
while(cin>>s,strcmp(s,"ENDOFINPUT")!=0)
{
if(strcmp(s,"START")==0)
{
getchar();
gets(str);
}
else continue;
cin>>e;
if(strcmp(e,"END")==0)
{
len=strlen(str);
for(int i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
if(str[i]=='A') str[i]='V';
else if(str[i]=='B') str[i]='W';
else if(str[i]=='C') str[i]='X';
else if(str[i]=='D') str[i]='Y';
else if(str[i]=='E') str[i]='Z';
else str[i]-=5;
}
}
cout<<str<<endl;
}
}
return 0;
}





是因为gets()和 cin.getline() 读入字符串的效率有差别吗?

10 个解决方案

#1


别人说 getline()的效率不怎么样。我不知道 !

#2


 mark

#3


对scanf和cin的效率做过测试, scanf效率cin比高很多,可对gets和cin.getline做单独测试,
我认为你的程序效率确实主要受cin.getline影响

#4


学习了。

#5


这种研究有多少意义?有多少人通过标准输入快速、大量的输入?他就是有点效率损失又如何?

#6


搞ACM建议还是用scanf 和printf吧,效率差太多了

#7


C++的流处理速度确实不怎么样?不过用起来C++的比较顺手,但ACM又似乎很讲究效率和算法。看来只能适应后者了。

#8


C++的流处理速度确实不怎么样?不过用起来C++的比较顺手,但ACM又似乎很讲究效率和算法。看来只能适应后者了。

#9


scanf和cin是有很大的差别的,acm有时候会在这些地方考察你,估计gets和getline也是一样的吧,是不是c的东西都快一点?- -!

#10


ACM 推荐用 C 的 IO 函数,C++ IO 包含缓冲,速度差的受不了,特别是大的输入。

#1


别人说 getline()的效率不怎么样。我不知道 !

#2


 mark

#3


对scanf和cin的效率做过测试, scanf效率cin比高很多,可对gets和cin.getline做单独测试,
我认为你的程序效率确实主要受cin.getline影响

#4


学习了。

#5


这种研究有多少意义?有多少人通过标准输入快速、大量的输入?他就是有点效率损失又如何?

#6


搞ACM建议还是用scanf 和printf吧,效率差太多了

#7


C++的流处理速度确实不怎么样?不过用起来C++的比较顺手,但ACM又似乎很讲究效率和算法。看来只能适应后者了。

#8


C++的流处理速度确实不怎么样?不过用起来C++的比较顺手,但ACM又似乎很讲究效率和算法。看来只能适应后者了。

#9


scanf和cin是有很大的差别的,acm有时候会在这些地方考察你,估计gets和getline也是一样的吧,是不是c的东西都快一点?- -!

#10


ACM 推荐用 C 的 IO 函数,C++ IO 包含缓冲,速度差的受不了,特别是大的输入。