代码之家  ›  专栏  ›  技术社区  ›  David Stocking

C++中的C++和“IO”?

  •  4
  • David Stocking  · 技术社区  · 16 年前

    是否有一个C语言库,为C++中的IO提供“& gt;& gt”和“& & lt;lt”的功能?对于控制台应用程序来说非常方便。当然,并不是很多控制台应用程序都在C中,但我们中的一些人会使用它。

    我知道控制台,读[行]写[行]和流流流阅读器流编写器,这不是问题的一部分。

    我觉得我不够具体

    int a,b;
    cin >> a >> b;
    

    真是太棒了!!

    string input = Console.ReadLine();
    string[] data = input.split( ' ' );
    a = Convert.ToInt32( data[0] );
    b = Convert.ToInt32( data[1] );
    

    …喘得够久了?另外还有其他原因导致C解决方案更糟。我必须把整条线都找出来,或者自己做些缓冲。如果我正在写的是IDK,比如1000行的钟形三角形,我会浪费很多时间一次读完所有的东西。

    编辑: 加尔!!!!

    好吧,问题!!!!

    使用Intx做大量的数字,比如.NET 4.0 biginteger来生成钟形三角形。如果你知道钟形三角形,它会很快变得非常巨大。这个问题的关键是我需要单独处理每个数字。如果你读了一整行,你就可以很容易地找到数据。这有点像π的数字。例如,42POW1048576是1.6 MB!我没有时间和记忆把所有的数字都读成一个字符串,然后选出我想要的那个。

    7 回复  |  直到 16 年前
        1
  •  1
  •   Simon Buchan    16 年前

    我想我得到了你想要的:简单的,默认格式的输入。我认为没有textReader.readxxx()的原因是 句法分析 ,解析为 坚硬的 :例如:应readfloat():

    • 忽略前导空格
    • 需要小数点
    • 需要尾随空格( 123abc )
    • 处理指数( 12.3a3 解析不同于 12.4e5 ?)

    更不用说readString()的作用是什么?从C++中,你会期望“读到下一个空白”,但是名字不这么说。

    现在所有这些都有了很好的合理答案,我同意C(或者更确切地说,BCL)应该提供这些答案,但我可以肯定地理解为什么他们选择不提供脆弱的、几乎不可能正确使用的、位于中央阶级的功能。

    编辑: 对于缓冲问题,一个丑陋的解决方案是:

    static class TextReaderEx {
        static public string ReadWord(this TextReader reader) {
            int c;
            // Skip leading whitespace
            while (-1 != (c = reader.Peek()) && char.IsWhiteSpace((char)c)) reader.Read();
            // Read to next whitespace
            var result = new StringBuilder();
            while (-1 != (c = reader.Peek()) && !char.IsWhiteSpace((char)c)) {
                reader.Read();
                result.Append((char)c);
            }
            return result.ToString();
        }
    }
    
    ...
        int.Parse(Console.In.ReadWord())
    
        2
  •  4
  •   Robert Greiner    16 年前

    不,我不会的。 C# != C++

    你应该尽力遵守你所使用的任何语言的语言惯例。

        3
  •  1
  •   JSBÕ±Õ¸Õ£Õ¹    16 年前

    不。你被困住了 Console.WriteLine . 不过,您可以创建一个提供此功能的包装器。

        4
  •  1
  •   Ananth    16 年前

    您可以使用console.writeline、console.readline..来实现此目的。两者都在系统命名空间中。

        5
  •  1
  •   user76035    16 年前

    有system.io.stream(读写器) 对于控制台:console.write,console.read

        6
  •  0
  •   Patrick angularsen    16 年前

    我不知道。如果您对链接输出感兴趣,可以使用 System.Text.StringBuilder . http://msdn.microsoft.com/en-us/library/system.text.stringbuilder(VS.71).aspx

    StringBuilder builder = new StringBuilder();
    builder.Append("hello").Append(" world!");
    Console.WriteLine(builder.ToString());
    

    也许不像C++那样漂亮,但作为另一个海报状态,C!= C++。

        7
  •  0
  •   Ruben    16 年前

    这在C中是不可能的,无论你多么努力:

    1. 运算符的左侧和右侧始终通过值传递;这排除了 cin .
    2. 的右侧 << >> must 是一个整数;这就排除了 cout .

    第一点是确保运算符重载比C++中稍微凌乱一些(可争论的,但它确实使事情变得简单很多),第二点被专门选择来排除C++的。 CIN 咳嗽 处理IO的方式,IIRC。

    推荐文章