我在空格分隔符分隔的整数中有字符串.有人可以帮助我如何将字符串拆分为整数.我试图使用find然后使用substr.有没有更好的方法呢?
可能重复:
如何在C++中对字符串进行标记?
伪代码:
Attributes[] = Split line(' ')
Run Code Online (Sandbox Code Playgroud)
怎么样?
我一直这样做:
char *pch;
pch = strtok(line," ");
while(pch!=NULL)
{
fputs ( pch, stdout );
}
Run Code Online (Sandbox Code Playgroud)
并获得一个非书面,卡住的退出文件.这有什么问题吗?好吧,事情甚至没有满足我的伪代码要求,但我对如何将令牌(作为char数组)索引到我的数组感到困惑,我想我应该写一个2-dim数组?
这就是我需要做的.我在C++中有一个字符串.对于字符串中的每一行,我需要在行的开头附加几个字符(如">>").我正在努力解决的问题是将字符串拆分为换行符,迭代追加字符的元素,然后将字符串重新加入的好方法.我已经看过一些想法,比如strtok(),但是我希望c ++字符串会有更优雅的东西.
在下面的函数中,我尝试通过查看是否可以读取类型以及之后是否完全消耗输入来查看字符串s是否可转换为类型.我想要TT
template <class T>
bool can_be_converted_to(const std::string& s, T& t)
{
std::istringstream i(s);
i>>std::boolalpha;
i>>t;
if (i and i.eof())
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是,can_be_converted_to<bool>("true")计算结果为false,因为i.eof()在函数结束时为false.
这是正确的,即使功能已经阅读整个字符串,因为它并没有试图看过去的字符串的结尾.(所以,显然这个函数适用于int和double,因为istringstream在阅读这些函数时会读到结尾.)
所以,假设我确实应该检查(i and <input completely consumed>):
问:如何使用eof()检查输入是否完全消耗?
如何在空间拆分字符串并返回第一个元素?例如,在Python中你会这样做:
string = 'hello how are you today'
ret = string.split(' ')[0]
print(ret)
'hello'
Run Code Online (Sandbox Code Playgroud)
在C++中这样做,我想我需要先拆分字符串.在网上看到这个,我已经看到了几个很长的方法,但最好的方法是什么,就像上面的代码一样?我发现的C++拆分的一个例子是
#include <boost/regex.hpp>
#include <boost/algorithm/string/regex.hpp>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
using namespace boost;
void print( vector <string> & v )
{
for (size_t n = 0; n < v.size(); n++)
cout << "\"" << v[ n ] << "\"\n";
cout << endl;
}
int main()
{
string s = "one->two->thirty-four";
vector <string> fields;
split_regex( fields, s, regex( "->" ) );
print( fields …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我编写的程序添加Unicode支持.我的ASCII代码已编译并具有以下行:
std::stringstream stream("abc");
std::istream_iterator<std::string> it(stream);
Run Code Online (Sandbox Code Playgroud)
我将其转换为:
std::wstringstream stream(L"abc");
std::istream_iterator<std::wstring> it(stream);
Run Code Online (Sandbox Code Playgroud)
我在istream_iterator构造函数中收到以下错误:
error C2664: 'void std::vector<_Ty>::push_back(std::basic_string<_Elem,_Traits,_Alloc> &&)' : cannot convert parameter 1 from 'std::basic_string<_Elem,_Traits,_Alloc>' to 'std::basic_string<_Elem,_Traits,_Alloc> &&'
1> with
1> [
1> _Ty=std::wstring,
1> _Elem=wchar_t,
1> _Traits=std::char_traits<wchar_t>,
1> _Alloc=std::allocator<wchar_t>
1> ]
1> and
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
1> and
1> [
1> _Elem=wchar_t,
1> _Traits=std::char_traits<wchar_t>,
1> _Alloc=std::allocator<wchar_t>
1> ]
1> Reason: cannot convert from 'std::basic_string<_Elem,_Traits,_Alloc>' to 'std::basic_string<_Elem,_Traits,_Alloc>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>, …Run Code Online (Sandbox Code Playgroud) 为什么我的程序没有输出:
10
1.546
,Apple 1
Run Code Online (Sandbox Code Playgroud)
代替
10
1
<empty space>
Run Code Online (Sandbox Code Playgroud)
这是我的计划:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main () {
string str = "10,1.546,Apple 1";
istringstream stream (str);
int a;
double b;
string c, dummy;
stream >> a >> dummy >> b >> dummy >> c;
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上我试图解析逗号分隔的字符串,任何更平滑的方式来做这将帮助我巨大.
在C++代码中,我试图在一个句子中搜索一个单词,但它仍在进行部分搜索.我希望它只搜索完整的单词,而不是它的任何部分,任何帮助?
size_t kk;
string word="spo";
string sentence="seven spoons";
kk=sentence.find(word);
if (kk !=string::npos)
cout << "something" << endl;
Run Code Online (Sandbox Code Playgroud) 如何将其设置为只读取用户输入的第一个单词,如果他们输入了很多信息?
我不想使用if-else语句要求他们输入新信息,因为他们的信息很多.
我只是希望它基本上忽略了第一个单词之后的所有内容,只打印输入的第一个单词.这甚至可能吗?
const int SIZEB = 10;
char word[SIZEB];
cout << " Provide a word, up to 10 characters, no spaces. > " << endl;
cin.getline(word, SIZEB);
cout << " The word is: " << word << endl;
cout << endl;
Run Code Online (Sandbox Code Playgroud)
UPDATE
它必须是一个cstring.这是我正在为学校工作的东西.我问了一系列问题,并在第一轮将答案存储为cstring.然后是第二轮,我将它们存储为字符串.
所以我给了一个包含十个矩阵的文件,我想从文件中读取这些矩阵并将它们保存到向量/数组中,其中每个矩阵都存储在向量或数组中.但是,这些矩阵的格式使我很难读取数据(我从输入文件中读取不好).
该文件具有以下格式.每个矩阵的元素用","分隔.每行用";"分隔,每个矩阵用"|"分隔.例如,三个2乘2矩阵如下.
1,2; 3,4 | 0,1; 1,0 | 5,3; 3,1 |
我只想将矩阵保存到三个不同的向量中,但我不知道如何做到这一点.
我试过了
while(getline(inFile,line)){
stringstream linestream(line);
string value;
while(getline(linestream, value, ','){
//save into vector
}
}
Run Code Online (Sandbox Code Playgroud)
但这显然非常粗糙,只能用逗号分隔数据.有没有办法用多个分隔符分隔数据?
谢谢!