Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 行中的最后一个字未读_C++_Delimiter_Line Endings_Delimited Text - Fatal编程技术网

C++ 行中的最后一个字未读

C++ 行中的最后一个字未读,c++,delimiter,line-endings,delimited-text,C++,Delimiter,Line Endings,Delimited Text,我目前正在开发一个程序,该程序从文件中读取每一行,并使用特定的分隔符从该行提取单词 所以我的代码基本上是这样的 #include <iostream> #include <fstream> #include <string> using namespace std; int main(int argv, char **argc) { ifstream fin(argc[1]); char delimiter[] = "|,.\n "; stri

我目前正在开发一个程序,该程序从文件中读取每一行,并使用特定的分隔符从该行提取单词

所以我的代码基本上是这样的

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argv, char **argc)
{
  ifstream fin(argc[1]);
  char delimiter[] = "|,.\n ";
  string sentence;

  while (getline(fin,sentence)) {
     int pos;
     pos = sentence.find_first_of(delimiter);
     while (pos != string::npos) {
        if (pos > 0) {
           cout << sentence.substr(0,pos) << endl;
        }
          sentence =sentence.substr(pos+1);
          pos = sentence.find_first_of(delimiter);
      }
  }
}
#包括
#包括
#包括
使用名称空间std;
int main(int argv,字符**argc)
{
ifstream-fin(argc[1]);
字符分隔符[]=“|,.\n”;
串句;
while(getline(fin,句子)){
int pos;
pos=句子。查找(分隔符)的第一个;
while(pos!=字符串::npos){
如果(位置>0){

coutgetline不会将新行字符保存在字符串中。例如,如果文件中有行 “你好,世界\n” getline将读取此字符串 “你好,世界\0” 因此,您的代码忽略了“世界”

i如果没有定义这句话,您可以修改代码以如下方式工作:

#include<iostream>
#include<fstream>
using namespace std;

int main(int argv, char *argc)
{
  ifstream fin(argc[1]);
  char delimiter[]="|,.\n ";
  while (getline(fin,sentence)) {
     sentence += "\n";
     int pos;   
     pos = find_first_of(sentence,delimiter);
     while (pos != string:: npos) {
        if (pos > 0) {
           cout << sentence.substr(0,pos) << "\n";
        }
          sentence =sentence.substr(pos+1);
          pos = find_first_of(sentence,delimiter);
      }
  }
}
#包括
#包括
使用名称空间std;
int main(int argv,char*argc)
{
ifstream-fin(argc[1]);
字符分隔符[]=“|,.\n”;
while(getline(fin,句子)){
句子+=“\n”;
int pos;
pos=查找(句子、分隔符)的第一个;
while(pos!=字符串::npos){
如果(位置>0){

coutgetline不会将新行字符保存在字符串中。例如,如果文件中有行 “你好,世界\n” getline将读取此字符串 “你好,世界\0” 因此,您的代码忽略了“世界”

i如果没有定义这句话,您可以修改代码以如下方式工作:

#include<iostream>
#include<fstream>
using namespace std;

int main(int argv, char *argc)
{
  ifstream fin(argc[1]);
  char delimiter[]="|,.\n ";
  while (getline(fin,sentence)) {
     sentence += "\n";
     int pos;   
     pos = find_first_of(sentence,delimiter);
     while (pos != string:: npos) {
        if (pos > 0) {
           cout << sentence.substr(0,pos) << "\n";
        }
          sentence =sentence.substr(pos+1);
          pos = find_first_of(sentence,delimiter);
      }
  }
}
#包括
#包括
使用名称空间std;
int main(int argv,char*argc)
{
ifstream-fin(argc[1]);
字符分隔符[]=“|,.\n”;
while(getline(fin,句子)){
句子+=“\n”;
int pos;
pos=查找(句子、分隔符)的第一个;
while(pos!=字符串::npos){
如果(位置>0){
cout解释:

提取字符,直到找到分隔字符(
\n
)并丢弃,然后返回其余字符

您的字符串不是以
\n
结尾,而是
^`hello world`$
,因此找不到分隔符或新的位置。

解释:

提取字符,直到找到分隔字符(
\n
)并丢弃,然后返回其余字符


您的字符串不是以
\n
结尾的,它是
^`hello world`$
,因此找不到分隔符或新的位置。

正如其他人所提到的,getline不会在结尾返回换行符。修复代码的最简单方法是在getline调用后的句子末尾追加一个字符

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argv, char **argc)
{
  ifstream fin(argc[1]);
  char delimiter[] = "|,.\n ";
  string sentence;

  while (getline(fin,sentence)) {
     sentence += "\n";
     int pos;
     pos = sentence.find_first_of(delimiter);
     while (pos != string::npos) {
        if (pos > 0) {
           cout << sentence.substr(0,pos) << endl;
        }
          sentence =sentence.substr(pos+1);
          pos = sentence.find_first_of(delimiter);
      }
  }
}
#包括
#包括
#包括
使用名称空间std;
int main(int argv,字符**argc)
{
ifstream-fin(argc[1]);
字符分隔符[]=“|,.\n”;
串句;
while(getline(fin,句子)){
句子+=“\n”;
int pos;
pos=句子。查找(分隔符)的第一个;
while(pos!=字符串::npos){
如果(位置>0){

cout正如其他人所提到的,getline不会在末尾返回换行符。修复代码的最简单方法是在getline调用后的句子末尾追加一个换行符

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argv, char **argc)
{
  ifstream fin(argc[1]);
  char delimiter[] = "|,.\n ";
  string sentence;

  while (getline(fin,sentence)) {
     sentence += "\n";
     int pos;
     pos = sentence.find_first_of(delimiter);
     while (pos != string::npos) {
        if (pos > 0) {
           cout << sentence.substr(0,pos) << endl;
        }
          sentence =sentence.substr(pos+1);
          pos = sentence.find_first_of(delimiter);
      }
  }
}
#包括
#包括
#包括
使用名称空间std;
int main(int argv,字符**argc)
{
ifstream-fin(argc[1]);
字符分隔符[]=“|,.\n”;
串句;
while(getline(fin,句子)){
句子+=“\n”;
int pos;
pos=句子。查找(分隔符)的第一个;
while(pos!=字符串::npos){
如果(位置>0){

这听起来像是课堂作业,显然不是真正的代码,“句子”的定义在哪里。我修复了此问题,但以后请发布按描述工作的代码。您最初发布的内容甚至没有编译。如果您发布说明您所说的错误的工作代码,这将节省我们一些时间,并为您提供更快的答案。谢谢,我现在知道我现在做错了什么。谢谢您的帮助这听起来像是一个课堂作业。Obv显然不是真正的代码,“句子”的定义在哪里。我修复了此问题,但以后请发布按描述工作的代码。您最初发布的内容甚至没有编译。如果您发布说明您所说的错误的工作代码,这将节省我们一些时间,并为您提供更快的答案。谢谢,我现在知道我现在做错了什么。谢谢您的帮助。是否还有其他分隔符可以帮助我们在这种情况下用于标识行尾?或者我可以使用getline以外的代码来读取\n吗?如果有,那么是什么?我猜您从文章中漏掉了这一点;'如果不希望提取此字符,可以使用成员“get”取而代之的是。'在这种情况下,是否有任何其他分隔符可用于标识行尾?或者我是否可以使用getline以外的代码来读取\n?如果有,则是什么?我猜您在文章中遗漏了这一点;'如果您不希望提取此字符,可以使用成员“get”代替。'