gpt4 book ai didi

C++ sscanf 读取字符串 vector

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:30 29 4
gpt4 key购买 nike

感谢对previous post的支持...我现在正在尝试将 vector 字符串存储在另一个字符串上并执行 sscanf 来检查文本,例如。 “TEXT”,如果找到,则在行尾追加另一个文本....

有什么想法吗???

#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>

using namespace std;

int main() {
vector<string> vs;
vector<string>::iterator vsi;
string agent;
string buffer;
string line;
while (!(cin.eof())) {
getline(cin, buffer);
cout << buffer << endl;
vs.push_back(buffer);
};

vsi = vs.begin();
for (int count=1; vsi != vs.end(); vsi++,count++){
cout << "string" << count <<"="<< *vsi << endl;
line = *vsi;
sscanf(line, "%s %[^\n]",text);
//dummy code
if text=="TEXT" do this:
cout << "agent" << text << "endl";
}
else: do nothing


return 0;
}



[root@server dev]# g++ -o newcode newcode.cpp
newcode.cpp: In function ‘int main()’:
newcode.cpp:24: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int sscanf(const char*, const char*, ...)’
[root@server dev]#

更新:我在 sscanf 上使用了 line.c_str() 并给出了这个错误

#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>

using namespace std;

int main() {
vector<string> vs;
vector<string>::iterator vsi;
string agent;
string buffer;
string line;
while (!(cin.eof())) {
getline(cin, buffer);
cout << buffer << endl;
vs.push_back(buffer);
};

vsi = vs.begin();
for (int count=1; vsi != vs.end(); vsi++,count++){
cout << "string" << count <<"="<< *vsi << endl;
line = *vsi;
cout << "LINE:" << line.c_str() << endl;
sscanf(line.c_str(), "%s %[^\n]",agent);
/* cout << "agent" << agent << "endl"; */
}

return 0;
}

[root@server dev]# g++ -o newcode newcode.cpp
newcode.cpp: In function ‘int main()’:
newcode.cpp:25: warning: cannot pass objects of non-POD type ‘struct std::string’ through ‘...’; call will abort at runtime
[root@server dev]#

我想做的是当检测到特定行上的字符串时,它会将文本附加到行尾和标准输出...

最佳答案

尚不完全清楚您要做什么,但如果您想将正确的类型传递到 sscanf 中,则需要进行一些更改。 sscanf 只处理 c 字符串,并且您已尝试将其传递到 c++ 字符串对象中,要解决此问题,您可能需要在 sscanf 中使用 line.c_str() 来以正确的格式传递。

更好的方法是使用像 string::find 这样的 c++ 算法,因为这将消除使用 sscanf 的需要。

关于C++ sscanf 读取字符串 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937690/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com