我有一个从第三方收到的字符串.此字符串实际上是文本文件中的文本,它可能包含用于行终止的UNIX LF或Windows CRLF.如何将其分解为多个字符串而忽略空行?我打算做以下事情,但不确定是否有更好的方法.我需要做的就是逐行阅读.这里的矢量只是一个方便,我可以避免它. *不幸的是我无法访问实际文件.我只收到字符串对象*
string textLine;
vector<string> tokens;
size_t pos = 0;
while( true ) {
size_t nextPos = textLine.find( pos, '\n\r' );
if( nextPos == textLine.npos )
break;
tokens.push_back( string( textLine.substr( pos, nextPos - pos ) ) );
pos = nextPos + 1;
}
Run Code Online (Sandbox Code Playgroud) 我试图使用空格作为分隔符拆分字符串.我想将每个标记存储在数组或向量中.
我试过了.
string tempInput;
cin >> tempInput;
string input[5];
stringstream ss(tempInput); // Insert the string into a stream
int i=0;
while (ss >> tempInput){
input[i] = tempInput;
i++;
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我输入"这是一个测试",该数组似乎只存储输入[0] ="这个".它不包含输入[2]到输入[4]的值.
我也试过使用矢量但结果相同.
如果用空格分隔,我怎么能得到像"Ac milan"和"Real Madryt"这样的字符串?
这是我的尝试:
string linia = "Ac milan ; Real Madryt ; 0 ; 2";
str = new char [linia.size()+1];
strcpy(str, linia.c_str());
sscanf(str, "%s ; %s ; %d ; %d", a, b, &c, &d);
Run Code Online (Sandbox Code Playgroud)
但它不起作用; 我有:a= Ac; b = (null); c=0; d=2;
我有一个模式匹配例程,它根据用于请求命令的URL从std :: map查找值.URL映射表填充了以下值:
// Assume this->commands_ is defined elsewhere as std::map<std::string, int>
// Providing a number of URL examples to give an idea of the structure of
// the URLs
this->commands_["/session"] = 1;
this->commands_["/session/:sessionid/url"] = 2;
this->commands_["/session/:sessionid/back"] = 3;
this->commands_["/session/:sessionid/forward"] = 4;
this->commands_["/session/:sessionid/element"] = 5;
this->commands_["/session/:sessionid/element/:id/text"] = 6;
this->commands_["/session/:sessionid/element/:id/value"] = 7;
Run Code Online (Sandbox Code Playgroud)
每个URL模式中的标记(由前面的':'指定)被查找例程的调用中的实际值替换(例如"/session/1234-8a0f/element/5bed-6789/text"),但是我将需要保留的命名参数.上例中的命名标记列表并非详尽无遗,并且上面列出的位置可能还有其他命名标记.请注意,令牌值是十六进制编码的数字.
目前,我正在迭代映射的键,用正则表达式值替换替换标记,并使用std :: tr1正则表达式类对请求的值执行正则表达式匹配,将匹配的标记名称和值捕获到向量中.代码在功能上与此等效(代码比通常为清晰起见而更冗长):
// Assume "using namespace std;" has been declared,
// and appropriate headers #included.
int Server::LookupCommand(const string& uri,
vector<string>* names,
vector<string>* values) {
int …Run Code Online (Sandbox Code Playgroud) 是否有类似于Java的C++拆分类型函数?我知道无视,但我不太了解它,以及它对我的情况如何有效.
我的意见是:
{
item = ball
book = lord of the rings
movie = star wars
}
Run Code Online (Sandbox Code Playgroud)
给出的输入是<attribute>= <value>并且我必须将两个存储在不同的字符串或整数中(取决于值,例如,如果它是一个数字,则使用整数).
有点我的代码如下所示:
static int myfunc(const string& stringInput)
{
string word;
stringstream ss;
ss << stringInput;
while(ss >> word)
{
++counters[word];
}
...
}
Run Code Online (Sandbox Code Playgroud)
这里的目的是获取一个输入字符串(由空格''分隔)到字符串变量中word,但这里的代码似乎有很多开销 - 将输入字符串转换为字符串流并从字符串流读取到目标字符串.
是否有更优雅的方式来实现相同的目的?
根据C++聊天室的精彩故事要求,有什么方法可以分解文件(在我的情况下包含一个大约100行的字符串,每行大约10个单词)并插入所有这些单词进入std :: set?
我试图用C++中的2个分隔符'+'和' - '分割一个字符串,使用字符串查找分隔符...
任何人都可以给我一个...
运用
str.find(分隔符)
例如:
A + B-C + d
需要输出:a b c d
提前致谢
我想将以HH:MM:SS格式化的字符串时间戳转换为仅秒,然后将其与数字进行比较.我用Java编写了我的代码的主要版本,但是我分别向Scanner询问,而不是有string时间.我对C++库不是很熟悉,因为我是一个Java人.想知道我怎么能用C++做到这一点?
尽量简短,String s = "1:01:01";而且String s2= "3600";我需要知道if (s>s2)
import java.util.*;
public class Test {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int hours;
int mins;
int secs;
System.out.println("Enter Hours: ");
hours = console.nextInt();
System.out.println("Enter Minutes: ");
mins = console.nextInt();
System.out.println("Enter Seconds: ");
secs = console.nextInt();
int showSecs = (hours * 3600) + (mins * 60) + secs;
System.out.println(hours + ":" + mins + ":" + secs + " in …Run Code Online (Sandbox Code Playgroud) 我的输入是"Hello World",我的目标输出是"olleH dlroW".
所以我的想法是将句子放入变量然后循环句子中的单词,反转它们中的每一个,最后将它们连接成一个新变量.
我的问题是:如何迭代句子的单词?
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
string reverseword(string word)
{
string rword;
int size = word.length();
while (size >= 0)
{
rword+= word[size];
size = size -1;
}
return rword;
}
int main()
{
string sentence;
cout<<"Enter the word/sentence to be reversed: ";
cin >> sentence;
string rsentence;
// for every word in the sentence do
{
rword = reverseword(word);
rsentence = rsentence + " " + rword;
}
cout<<rword;
return 0; …Run Code Online (Sandbox Code Playgroud)