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

Assigning read line to a variable without >>

本文关键字:gt 变量 读取 分配      更新时间:2023-10-16

刚开始使用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

不能使用=而不是>>的原因是因为它们是两个不相关的运算符。

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

std::string str;
myReadFile >> str;

您不能使用=运算符,但您没有理由犹豫是否选择另一个运算符。我认为+对你的情况有意义:

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++有一个称为"运算符重载"的功能,我在上面演示了它,它允许您根据自己选择的类型修改内置运算符的行为。但是,您必须小心,不要以使操作更难理解的方式滥用该功能。

一般来说,在编程中做出这样的设计选择时,一定要选择让读者更容易理解代码的选项。这适用于变量名、注释等。