C++ 字符串管理C/C++&;从txt文件读写
我分别在文件中读取和写入字符串时遇到问题 目的: 要将字符串作为完整的句子输入到文本文件中,请从文本文件中读取字符串,并使用函数分隔以元音开头的所有单词,并将其显示为句子。(句子只需要由以元音开头的字符串中的单词组成。) 问题: 代码按预期工作,但由于我在从txt文件中提取子字符串时使用了getline()函数从txt文件中获取字符串,因此它在元音之后包含整个文件,而不仅仅是单词。我无法理解如何使子字符串只包含单词 代码:C++ 字符串管理C/C++&;从txt文件读写,c++,string,C++,String,我分别在文件中读取和写入字符串时遇到问题 目的: 要将字符串作为完整的句子输入到文本文件中,请从文本文件中读取字符串,并使用函数分隔以元音开头的所有单词,并将其显示为句子。(句子只需要由以元音开头的字符串中的单词组成。) 问题: 代码按预期工作,但由于我在从txt文件中提取子字符串时使用了getline()函数从txt文件中获取字符串,因此它在元音之后包含整个文件,而不仅仅是单词。我无法理解如何使子字符串只包含单词 代码: #包括 #包括 #包括 #包括 使用名称空间std; 字符串元音(字符串
#包括
#包括
#包括
#包括
使用名称空间std;
字符串元音(字符串a)
{
int c=尺寸f(a);
字符串b[c];
字符串d;
静态int n;
对于(int i=1;i我没有仔细阅读您的代码,但有几件事很突出:
查找首先查找——这将大大简化您的代码
sizeof(a)
当然不会像你认为的那样做[除非你认为它给出了std::string
类类型的大小-这使得它作为一个用例非常奇怪,为什么不使用12或24?]
find
(和find\u first\u of
),从技术上讲,当函数找不到所需内容时,它不会返回-1。它返回std::string::npos
[看起来可能是-1,但a)不能保证是,b)没有单音,所以不能是负数]
您的程序只读取一行
x.substr(n)
将从位置n
向您提供x
字符串-这就是您想要的吗
不要重复find
,使用p=x.find(“x”);
,然后执行x.substr(p)
[假设这是您想要的]
我没有仔细阅读您的代码,但有几点很突出:
查找首先查找——这将大大简化您的代码
sizeof(a)
当然不会像你认为的那样做[除非你认为它给出了std::string
类类型的大小-这使得它作为一个用例非常奇怪,为什么不使用12或24?]
find
(和find\u first\u of
),从技术上讲,当函数找不到所需内容时,它不会返回-1。它返回std::string::npos
[看起来可能是-1,但a)不能保证是,b)没有单音,所以不能是负数]
您的程序只读取一行
x.substr(n)
将从位置n
向您提供x
字符串-这就是您想要的吗
不要重复find
,使用p=x.find(“x”);
,然后执行x.substr(p)
[假设这是您想要的]
您的代码存在各种问题
int c = sizeof( a );
这是一个字符串在内存中占用的字节数。您当然不想创建一个包含这么多字符串的数组,因为这对您试图实现的目标毫无意义。不要这样做。您只需在循环中复制一个字符串,您只需要一个字符串,而您已经有了字符串d
要获得字符串的实际大小,必须调用
str.size()
string.substr(..)有几个重载,其中一个重载只接受一个参数,即索引。这将返回原始字符串中从该索引开始的子字符串。(从元音开始的字符串一直到字符串末尾)
您可能正在寻找的是包含两个参数的重载,即开始索引(单词的开头和结尾)
字符串输入不会使用您输入的换行符刷新cin。然后您以追加模式将其添加到文件中,因此在运行程序几次后,您的文件是一个巨大的单行程序。您真的打算这样做吗?
也许你应该在输入后显式地在文件中添加新行。类似于file的东西,你的代码有各种各样的问题
int c = sizeof( a );
这是一个字符串在内存中占用的字节数。您当然不想创建一个包含这么多字符串的数组,因为这对您试图实现的目标毫无意义。不要这样做。您只需在循环中复制一个字符串,您只需要一个字符串,而您已经有了字符串d
要获得字符串的实际大小,必须调用
str.size()
string.substr(..)有几个重载,其中一个重载只接受一个参数,即索引。这将返回原始字符串中从该索引开始的子字符串。(从元音开始的字符串一直到字符串末尾)
您可能正在寻找的是包含两个参数的重载,即开始索引(单词的开头和结尾)
字符串输入不会使用您输入的换行符刷新cin。然后您以追加模式将其添加到文件中,因此在运行程序几次后,您的文件是一个巨大的单行程序。您真的打算这样做吗?
也许你应该在输入输入后显式地在文件中添加新行。类似于file的东西我为未优化的代码感到抱歉…我仍然在学习C#…1的细节。我使用了sizeof(),因为我使用的是ios:app,字符串正在增加,所以我不确定要运行多少个循环,sizeof()我知道eof()和一个循环可以读取多行,我只是直接得到了1行的代码。3.是的,我希望它从左边继续,因此是“n”和“n+1”。4.我是x.substr()在一个单词后开始和结束;不包括字符串的整个剩余部分。但是sizeof
并没有给出字符串中元素的数量,它给出了保存保持字符串的各种数据位所需的字节数
b[i]=a.substr(a.find("a",n));
static int n;