c++ - 使用 vector 从c++中的文件中反转字符串

标签 c++ string vector char reverse

我正在尝试编写一个程序,从文件(仅字符串)中读取文本并将其反转。下面的代码就是这样做的,但它没有考虑单词之间的空格:

#include<iostream>
#include<vector>
#include<fstream>


using namespace std; 

int main(){

    ifstream file("file.txt");
    char i;
    int x;
    vector<char> vec;

    if(file.fail()){
        cerr<<"error"<<endl;
        exit(1);
    }



    while(file>>i){
        vec.push_back(i);
    }

    x=vec.size(); 

    reverse(vec.begin(), vec.end());

    for(int y=0; y<x; y++){
        cout<<vec[y];
    }


    return 0;
}

如果文件中的文本是“dlroW olleH”,程序将打印出“HelloWorld”。我该怎么做才能打印“Hello World”(两个词之间有空格)?

最佳答案

正如 user4581301 所指出的,>> 会自动跳过任何空格。您可以使用 std::noskipws 禁用此功能流操纵器并将 file>>i 更改为 file>>std::noskipws>>i。一个更好的解决方案是简单地使用 std::getline 将整个字符串读入 std::string,反转它,然后打印出来,而不是单独处理字符.

#include <string>
#include <fstream>
#include <iostream>
#include <algorithm>
int main()
{
    std::ifstream file("input.txt");
    //insert error checking stuff here
    std::string line;
    std::getline(file, line);
    //insert error checking stuff here
    std::reverse(line.begin(), line.end());
    std::cout << line << '\n';
}

请注意您的代码,您应该仅在使用变量时声明变量。例如,您的变量 x 仅在程序末尾使用,但在顶部一直声明。 using namespace std 也可以是 considered bad practice .

关于c++ - 使用 vector 从c++中的文件中反转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50011934/

相关文章:

c++ - 迭代器字符串问题

c++ - 使用 std::chrono 计算耗时时出现“段错误”

c++ - 必须在 PIMPL 中提供析构函数

swift - 如何在另一个字符串中找到所有出现的字符串子集并将它们替换为其他内容? (例如 : Emote replacement)

C++:初始化成员 Vector 值

c++ - 通过迭代器打印出 map 的值

c++ - 哪种基数更适合我的 BigInteger 库?

文件和 vector 的 C++ 长度

java - 在java中读取csv文件时跳行

arrays - 寻找一种分割数组的好方法