将读取行分配给不带>>的变量

时间:2012-02-19 22:36:25

标签: c++

刚刚开始使用C ++,做了一点C,但有一点我不能得到的是你不能用>>代替=

我的代码如下:

char output[100];
if (myReadFile.is_open())
{
    for(int i=0; i != random_integer; i++)
    {
       if(i == random_integer-1){
        myReadFile >> output;
        printf("%s",output);
       }
    }
}
myReadFile.close();

我想将myReadFile >> output更改为output = myReadFile,但你不能这样做?

我的第二个问题是,我想测量我分配给输出的字符串的长度,如何在不循环遍历整个char数组的情况下执行此操作?

TIA

2 个答案:

答案 0 :(得分:4)

您无法使用=代替>>的原因是因为他们是两个不相关的运营商。

要解决字符串长度问题,请不要使用原始char数组。请改用std::string,因为它在内部管理自己的内存:

std::string str;

myReadFile >> str;

答案 1 :(得分:-2)

您无法使用=运算符,但您没有理由不再选择其他运算符。我认为+对你的情况有意义:

char* operator+ (char* s, std::istream &in) {
    in >> s;
    return s;
}

要在代码中使用此功能,请尝试以下操作:

#include <string>
#include <fstream>

char* operator+ (char* s, std::istream &in) {
    in >> s;
    return s;
}


int main(){
    std::fstream myReadFile ("test.txt", std::fstream::in);
    int random_integer = 4;

    /*start your code*/
    char output[100];
    if (myReadFile.is_open())
    {
        for(int i=0; i != random_integer; i++)
        {
           if(i == random_integer-1){
            output + myReadFile;
            printf("%s",output);
           }
        }
    }
    /*end your code*/
}

test.txt内容:

aaaa
bbbb
cccc
dddd
eeee

代码输出:

aaaa

开玩笑实际上会尝试使用不同的运算符来解决这种情况。您的代码正在从输入(文件)流中读取,因此您应该使用运算符>>来清除它。

C ++有一个名为“运算符重载”的功能,我在上面演示了它允许您修改内置运算符的行为以适合您选择的类型。但是,您必须小心不要滥用此功能,使操作更难以理解。

通常,在编程时进行这样的设计选择时,请始终选择使您的代码更容易理解的选项。这适用于变量名称,注释等。