我正在尝试迭代字符串的单词.
可以假设该字符串由用空格分隔的单词组成.
请注意,我对C字符串函数或那种字符操作/访问不感兴趣.另外,请在答案中优先考虑优雅而不是效率.
我现在最好的解决方案是:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string s = "Somewhere down the road";
istringstream iss(s);
do
{
string subs;
iss >> subs;
cout << "Substring: " << subs << endl;
} while (iss);
}
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来做到这一点?
如果我有一个包含以逗号分隔的数字列表的std :: string,那么解析数字并将它们放在整数数组中的最简单方法是什么?
我不想将其概括为解析其他任何内容.只是一个逗号分隔整数的简单字符串,如"1,1,1,1,2,1,1,1,0".
我对以下内容进行了解释,但不确定如何在其中包含分隔符.
void Tokenize(const string str, vector<string>& tokens, const string& delimiters)
{
int startpos = 0;
int pos = str.find_first_of(delimiters, startpos);
string strTemp;
while (string::npos != pos || string::npos != startpos)
{
strTemp = str.substr(startpos, pos - startpos);
tokens.push_back(strTemp.substr(0, strTemp.length()));
startpos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, startpos);
}
}
Run Code Online (Sandbox Code Playgroud) 我喜欢在python中我可以做的事情:
points = []
for line in open("data.txt"):
a,b,c = map(float, line.split(','))
points += [(a,b,c)]
Run Code Online (Sandbox Code Playgroud)
基本上它正在读取行列表,其中每行代表3D空间中的一个点,该点表示为由逗号分隔的三个数字
如何在没有太多头痛的情况下在C++中完成这项工作?
性能不是很重要,这种解析只发生一次,因此简单性更重要.
PS我知道这听起来像是一个新手问题,但相信我,我在D中编写了一个词法分析器(非常类似于C++),它涉及通过char读取一些文本char并识别标记,
就是这样,经过很长时间回到C++蟒蛇时期,只是让我不想浪费时间在这些事情上.
我刚开始学习C++.我只是玩弄它并遇到一个问题,包括逐字逐句输入字符串,每个单词用空格分隔.我的意思是,假设我有
name place animal
Run Code Online (Sandbox Code Playgroud)
作为输入.我想读第一个字,对它做一些操作.然后读取第二个单词,对其进行一些操作,然后读取下一个单词,依此类推.
我试着用这样的getline存储整个字符串
#include<iostream>
using namespace std;
int main()
{
string t;
getline(cin,t);
cout << t; //just to confirm the input is read correctly
}
Run Code Online (Sandbox Code Playgroud)
但是,我如何对每个单词执行操作并继续下一个单词?
此外,在谷歌上搜索C++时,我在许多地方看到,而不是使用"使用命名空间std",人们更喜欢用"std ::"编写所有内容.为什么?我认为他们做同样的事情.那么为什么要一次又一次地写它呢?
对不起,我的C/C++不是那么好,但是对我来说,下面的现有代码看起来像垃圾.它也有一个错误 - 当str ="07/02/2010"由'\ 0'终止时失败 - .我认为不是修复错误,而是可以重写.在Python中它只是'kas\nhjkfh kjsdjkasf'.split().我知道这是C-ish代码,但分割字符串不是那么复杂!坚持使用相同的签名,而不使用额外的库,我怎样才能改进它 - 让它简短又甜蜜?我可以说这个代码闻起来,例如因为else句子一直到最后.
线路失败:
_tcsncpy_s(
s.GetBuffer((int) (nIndex-nLast)),
nIndex-nLast,
psz+nLast,
(size_t) (nIndex-nLast)
);
Run Code Online (Sandbox Code Playgroud)
当字符串"07/02/2010"以'\ 0'结尾时,它将尝试将11个字符写入只有10个字符长的缓冲区.
全功能:
#define
// This will return the text string as a string array
// This function is called from SetControlText to parse the
// text string into an array of CStrings that the control
// Gadgets will attempt to interpret
BOOL CLVGridDateTimeCtrl::ParseTextWithCurrentFormat(const CString& str, const CGXStyle* pOldStyle, CStringArray& strArray )
{
// Unused:
pOldStyle;
// we assume …Run Code Online (Sandbox Code Playgroud) 我想要做的是输入一个文件LINE BY LINE并标记并输出到输出文件.我能够做的是输入文件中的第一行但我的问题是我无法输入下一行要标记化的行,以便它可以保存为输出文件中的第二行,这是我到目前为止输入文件中的第一行所能做的.
#include <iostream>
#include<string> //string library
#include<fstream> //I/O stream input and output library
using namespace std;
const int MAX=300; //intialization a constant called MAX for line length
int main()
{
ifstream in; //delcraing instream
ofstream out; //declaring outstream
char oneline[MAX]; //declaring character called oneline with a length MAX
in.open("infile.txt"); //open instream
out.open("outfile.txt"); //opens outstream
while(in)
{
in.getline(oneline,MAX); //get first line in instream
char *ptr; //Declaring a character pointer
ptr = strtok(oneline," ,");
//pointer scans first token in line …Run Code Online (Sandbox Code Playgroud) 给定一个由单个空格分隔的单词组成的字符串,按单词在字符串中出现的次数降序打印单词。
\n\n例如,输入字符串 \xe2\x80\x9ca bb\xe2\x80\x9d 将生成以下输出:
\n\nb : 2\na : 1\nRun Code Online (Sandbox Code Playgroud)\n\n首先,我想说输入字符串是由单字母单词还是由多字母单词组成还不太清楚。如果是前者,事情可能会很简单。
\n\n这是我的想法:
\n\nint c[26] = {0};\nchar *pIn = strIn;\n\nwhile (*pIn != 0 && *pIn != ' ')\n{\n ++c[*pIn];\n ++pIn;\n}\n\n/* how to sort the array c[26] and remember the original index? */\nRun Code Online (Sandbox Code Playgroud)\n\n我可以获得输入字符串中每个单字母单词的频率统计信息,并且可以对其进行排序(使用 QuickSort 或其他方式)。但是在计数数组排序后,如何获取与计数相关的单字母单词,以便稍后将它们成对打印出来?
\n\n如果输入字符串由多字母单词组成,我计划使用 amap<const char *, int>来跟踪频率。但同样,如何对映射的键值对进行排序?
问题是用 C 或 C++ 编写的,欢迎提出任何建议。
\n\n谢谢!
\n