所以我在C中写了这个,所以sscanf扫描s然后丢弃它,然后扫描并存储它.因此,如果输入为"Hello 007",则扫描Hello但丢弃,并将d7存储在d中.
static void cmd_test(const char *s)
{
int d = maxdepth;
sscanf(s, "%*s%d", &d);
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是如何在C++中做同样的事情?可能使用stringstream?
问题 - >将固定长度字符串返回到std :: string*.
目标机器 - > Fedora 11.
我必须派生一个函数,它接受整数值并将固定的长度字符串返回给字符串指针 ;
例如 - > int value的范围是0到-127
所以对于int值0 - >它显示000
为值-9 - >它应该返回-009
表示值-50 - >它应该返回-050
表示值为-110 - >它应该返回-110
所以简而言之,在所有情况下,长度应该相同.
我做了什么:我已经根据下面的要求定义了这个功能.
我需要帮助的地方:我已经派生了一个函数,但我不确定这是否是正确的方法.当我在Windows端的独立系统上测试它时,exe有时会停止工作,但是当我在Linux机器上包含这个功能和整个项目时,它可以完美地工作.
/* function(s)to implement fixed Length Rssi */
std::string convertString( const int numberRssi, std::string addedPrecison="" )
{
const std::string delimiter = "-";
stringstream ss;
ss << numberRssi ;
std::string tempString = ss.str();
std::string::size_type found = tempString.find( delimiter );
if( found == std::string::npos )// not found
{ …Run Code Online (Sandbox Code Playgroud) 我有一个简单的GUI程序,它使用自定义stringstream将控制台的输出重定向到GUI中的文本字段(在某些情况下).目前.每当我点击输入时窗口都会重绘,但有时可能会在其他时间生成输出.有没有办法注册一个函数,stringstream每次<<在流上使用运算符时都会执行该函数?
注意
我应该指出我不能在我的解决方案中使用C++ 11.将编译和运行它的机器将没有c ++ 11可用.
我想将double转换为字符串,在点之后舍入到2位小数.我希望1.009表示为"1.01",1.0表示为"1".这就是我尝试过的:
std::ostringstream oss;
oss << std::fixed << std::setprecision(2) << std::noshowpoint << 1.0;
Run Code Online (Sandbox Code Playgroud)
它输出"1.00",即使我从未设置宽度甚至指定std::noshowpoint.如何实现理想的表示?
让我说我有
string sentence{"Hello how are you."}
Run Code Online (Sandbox Code Playgroud)
而且我希望字符串句子没有"Hello"而"你好吗".我该怎么做呢
我尝试过这样的事情:
stringstream ss(sentence);
ss>> string junkWord;//to get rid of first word
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时:
cout<<sentence;//still prints out "Hello how are you"
Run Code Online (Sandbox Code Playgroud)
很明显,stringstream它不会改变实际的字符串.我也尝试过使用,strtok但效果不佳string.
这似乎微不足道,但我似乎无法解决这个问题.我有格式的STL字符串2013 336 (02 DEC) 04(04小时在哪里,但这是无关紧要的).我想提取月份的日期(02在示例中)和月份以及小时.
我试图干净利落地避免例如在括号中拆分字符串,然后使用子字符串等.理想情况下,我想使用a stringstream并将其重定向到变量.我现在得到的代码是:
int year, dayOfYear, day;
std::string month, leftParenthesis, rightParenthesis;
std::string ExampleString = "2013 336 (02 DEC) 04";
std::istringstream yearDayMonthHourStringStream( ExampleString );
yearDayMonthHourStringStream >> year >> dayOfYear >> leftParenthesis >> day >> month >> rightParenthesis >> hour;
Run Code Online (Sandbox Code Playgroud)
它提取year并且dayOfYear好了2013,336但事情开始变得糟糕.day是0,month和空字符串,和hour843076624.
leftParenthesis是(02这样它包含day但当我尝试省略leftParenthesis变量时,重定向yearDayMonthHourStringStream流day也是0. …
我想从这个事实开始,我还在学习C++,其中一些东西仍然令我困惑.
我想要完成的是构建一个字节流以通过套接字发送.我正在尝试为握手创建一个长度为1536字节的数据包
std::stringstream s1Stream;
char randData[1528], zeroVal[4] = {0, 0, 0, 0};
memset(&randData, 1, sizeof(randData)); // Fill the buffer with data
s1Stream << timestampVal; // 4 bytes
s1Stream << zeroVal; // 4 bytes
s1Stream << randData; // 1528 bytes
Run Code Online (Sandbox Code Playgroud)
当我将s1Stream转换为字符串并检查该字符串的size()时,程序会说大小为1541.
我究竟做错了什么?
下面的示例显示了两个函数foo(),bar()它们尝试连接两个字符串.如果左侧+参数为a,则代码将无法编译&String.
这是一个例子,foo()其中无法编译错误消息[E0369].该函数bar()表明我可以通过克隆LHS参数来摆脱困境.我的直觉表明这种克隆应该是多余的.
为什么我要clone()参加LHS论证?这是Rust +-operator 当前实现状态的反映,还是有一种有意的深层思考?
// rustc 1.7.0-nightly (110df043b 2015-12-13)
fn foo(a: &String, i: i32) -> String {
a + &i.to_string() // .. '+' cannot be applied to type & .. String [E0369]
}
fn bar(a: &String, i: i32) -> String {
a.clone() + &i.to_string() // Ok
}
#[test]
fn my_test() {
assert!(foo(&"s".to_string(), 42) == "s42"); // fn foo(..) failed to compile
assert!(bar(&"s".to_string(), …Run Code Online (Sandbox Code Playgroud) 什么是默认格式,当我写一个双倍的stringstream?
double v = 3.0;
std::stringstream ss;
ss << v;
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到一个默认格式设置列表stringstream?std::istream(在stdlib中)的所有派生类的默认格式是否相同?
我正在尝试将printf输出转换为std::string变量。我有以下for循环:
for(i=0; i<53; i++) {
printf("%02X", pbRecvBuffer[i]);
}
Run Code Online (Sandbox Code Playgroud)
此循环的输出为十六进制值,例如:01445420434F2..。我的第一次尝试是使用stringstream以下方法:
stringstream os;
for(i=0; i<53; i++)
os << std::hex << pbRecvBuffer[i];
std::cout << os << std::endl;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给了我错误的结果。也许有人直接看到它可以帮助我。