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”代替。'