各种方式输入字符串时间长短比较

测试代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e8+50;
char a[N];

inline void solve1()
{
    gets(a);
}

inline void solve2()
{
    scanf("%s",&a);
}

inline void solve3()
{
    char ch;
    while(ch!='\n')
        ch=getchar();
}

inline void solve4()
{
    int i=0;
    while(~scanf(" %c",&a[i]))
        i++;
}

int main()
{
    freopen("judge.txt","r",stdin);
    clock_t s,t;
    s=clock();
    //solve1();
    //solve2();
    //solve3();
    solve4();
    t=clock();
    cout<<t-s<<endl;
    return 0;
}

(大部分测试内容于评测鸭上进行)


因为cin过于鸡肋,所以并未进行测试

以下为测试内容:(单位:ms)

  • 数据大小:10000

    (gets字符串):0.040394

    (scanf字符串):0.051836

    (getchar单字符):0.057788

    (scanf单字符):0.533744

  • 数据大小:100000

    (gets字符串):0.149481

    (scanf字符串):0.229154

    (getchar单字符):0.315258

    (scanf单字符):5.139085

以下数据因常数过大,精度降低至1

  • 数据大小:1000000

    (gets字符串):5

    (scanf字符串):56

    (getchar单字符):48

    (scanf单字符):324

  • 数据大小:100000000

    (gets字符串):661

    (scanf字符串):5215

    (getchar单字符):4426

    (scanf单字符):31578

总结:

1.数据规模较小时,循环getchar输入快于scanf直接输入字符串,数据规模较大时,则反之

2.数据规模较小时,各种方式的时间相差不大

3.gets任何数据规模下都明显快于其他方式,且代码长度最短

                                                (本测试仅供参考)

原文地址:https://www.cnblogs.com/loafer-924/p/11888283.html

时间: 2024-08-29 18:24:38

各种方式输入字符串时间长短比较的相关文章

通过输入字符串来构建二叉树

对二叉树的一系列操作都是建立在先将二叉树构造出来的前提上.大四考研的某天早上偷偷躲在宿舍敲二叉树的代码,也是醉醉的.学习就应该趁年轻,老了就学不动了. 首先是对二叉树的节点的一个声明: typedef struct BTree{ char str; struct BTree * lchild; struct BTree * rchild; }BTree; 然后我是打算用递归外加先序的方式对二叉树进行构建的,也就对输入字符串提出一个要求: printf("Please input the tree

python3 tkinter 获取输入字符串长度

python 3  获取输入字符长度 #-*- coding:utf-8 -*- from tkinter import * from tkinter import messagebox def get_Tk(): top = Tk() return top #定义获取字符长度函数 def sum_test(baseNum): return len(baseNum) def show_result(top,re_sum): #这里使用Toplevel(top) 是为了新开一个窗口 ,且显示计算结

C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能

本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文涉及程序为.NET Core 2.0控制台应用程序. 一.常量字符串拼接 private static void TestPerformance(Action action, int times) { Stopwatch sw = new Stopwatch(); sw.Start(); for(i

Jenkins 输入字符串给newLISP 作为参数使用问题

比如 需要生成sqoop import语句,用newlisp脚本: (set 'import-cmd (format "%s/sqoop-import --options-file media_options.txt --table %s --where \"ID = 2\" --target-dir %s -m 1 --fields-terminated-by '%s' --lines-terminated-by '\\n'" sqoop-path table-n

查找输入字符串中出现字符次数最多的那个字和重复次数

public class chongfu { //找出字符串中重复次数最多的那个字符: /** * public static void main(String[] args){ System.out.println("请输入字符串"); Scanner a = new Scanner(System.in); String b=a.nextLine(); int count=0; int d=0; char t = 0; for(int i=0;i<b.length();i++)

【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序将该字符串中的各个单词反序拼装并输出.例如,如果输入的字符串是"Hello, how do you do",那么输出的字符串为"do you do how Hello,".注意保留各个单词之间的空格及相应的标点符号. 二.算法设计 通过观察示例字符串(即"Hello, how do you do"),我们可以看到该字符串中各个单词与空格之间的关系为:单词总数=空格总数+1.也就是说,示例字符串中的空格总数为4

例题:请输入一个时间,判断是一天中的哪个时间。逻辑思维比较强的一个题。主要复习一下if else语句

while (true) { Console.Write("请输入一个时间(24小时制):"); //string   s = Console.ReadLine(); int hour = Convert.ToInt32(Console .ReadLine ()); if(hour >= 0 && hour < 6) { Console.Write("凌晨" + hour + "点"); } else if(hour

JAVA-从题目看算法,将输入字符串进行排序并输出

来看一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一个典型的可用递归算法来实现的例子,我们来看一下利用递归的2种不同解法. 1.典型递归元素交换的算法 (1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时. (2)算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素. package test; import java.uti

字符串分隔 -&gt;连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; ?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 输入例子: abc 123456789 输出例子: abc00000 12345678 90000000 import java.util.*; public class Main{     public static void main(String[] ar