嗨,我正在尝试通过将整个文件加载到char[]使用中来标记字符串fread.由于一些奇怪的原因,它并不总是有效,而valgrind在这个非常小的示例程序中抱怨.
给出类似的输入 test.txt
first
second
Run Code Online (Sandbox Code Playgroud)
以及以下方案
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
//returns the filesize in bytes
size_t fsize(const char* fname){
struct stat st ;
stat(fname,&st);
return st.st_size;
}
int main(int argc, char *argv[]){
FILE *fp = NULL;
if(NULL==(fp=fopen(argv[1],"r"))){
fprintf(stderr,"\t-> Error reading file:%s\n",argv[1]);
return 0;
}
char buffer[fsize(argv[1])];
fread(buffer,sizeof(char),fsize(argv[1]),fp);
char *str = strtok(buffer," \t\n");
while(NULL!=str){
fprintf(stderr,"token is:%s with strlen:%lu\n",str,strlen(str));
str = strtok(NULL," \t\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译像
gcc test.c -std=c99 -ggdb
Run Code Online (Sandbox Code Playgroud)
跑得像
./a.out …Run Code Online (Sandbox Code Playgroud) 如何访问std :: string变量中的每个成员?例如,如果我有
string buff;
Run Code Online (Sandbox Code Playgroud)
假设buffconatains "10 20 A"为ASCII内容.那我怎么能分别访问10,20和A?
我有一个字典 .txt文件,可能有超过一千个单词及其定义.我已经编写了一个程序来从该文件中获取每行的第一个单词,并根据用户输入的字符串进行检查:
void checkWord(string input)
{
std::ifstream inFile;
inFile.open("Oxford.txt");
if (inFile.is_open())
{
string line; //there is a "using std::string" in another file
while (getline(inFile, line))
{
//read the first word from each line
std::istringstream iss(line);
string word;
iss >> word;
//make sure the strings being compared are the same case
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
std::transform(input.begin(), input.end(), input.begin(), ::tolower);
if (word == input)
{
//Do a thing with word
}
}
inFile.close();
return "End of file";
}
else
{
return …Run Code Online (Sandbox Code Playgroud) 我是C++的初学者,我想知道如何做到这一点.我想写一个接受文本行的代码.例如"Hello stackoverflow是一个非常好的网站"
从输出我只想打印前三个单词,跳过其余的.
我想要的输出:"Hello stackoverflow是"
如果是Java,我会使用字符串split().至于C++,我真的不知道.他们的任何类似或C++的方法是什么?
我正在开发一个C/C++应用程序(在Visual Studio 2010中),我需要对逗号分隔的字符串进行标记,我希望它尽可能快.目前我正在使用strtok_s.我跑了一些测试strtok_s对比sscanf,它似乎就像strtok_s是快(除非我写了一个可怕的实现:)),但我想知道如果任何人都可以提出一个更快的替代方案.
我有两个空格分隔的字符串...(X不代表相同的符号)
st1 = "abc def kok...."
st2 = "kok bbr def ffe ...."
Run Code Online (Sandbox Code Playgroud)
我想构建一个交集字符串,如下所示:
common = "kok def"
在c ++中这样做的有效方法是什么?
谢谢
我一直在尝试将输入字符串拆分为由空格描绘的较小字符串.我在这里找到了这段代码:
stringstream ss ("bla bla");
string s;
while (getline(ss, s, ' ')) {
cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)
哪个工作得很好.但是,如果我用包含字符串的变量替换"bla bla":
string userInput;
cin >> userInput;
stringstream ss (userInput);
string s;
while (getline(ss, s, ' ')) {
cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)
只打印出第一个单词/ char/string.这是为什么?有办法解决吗?我已经查看了一些字符串流问题,但问题是我真的不知道我在寻找什么.
我已经更改了我的代码,现在编译时出现这些错误:
`check.cpp: In function ‘int main()’:`
Run Code Online (Sandbox Code Playgroud)
check.cpp:14:55: error: invalid conversion from ‘const char**’ to ‘char* const*’ [-fpermissive]
/usr/include/getopt.h:152:12: error: initializing argument 2 of ‘int getopt(int, char* const*, const char*)’ [-fpermissive]
int main() {
string text="-f input.gmn -output.jpg";
int argc=text.length();
cout<<"argc: "<<argc<<endl;
char const * argv = text.c_str();
cout<<"argv: "<<argv<<endl;
int c = getopt (argc, &argv, "f:s:o:pw:h:z:t:d:a:b:?");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我需要解析一个C++ stdin输入,看起来像这样:
NM(对)
0 0
2 1 (0,1)
2 0
5 8 (0,1) (1,3) (2,3) (0,2) (0,1) (2,3) (2,4) (2,4)
Run Code Online (Sandbox Code Playgroud)
如果N> 0 && M> 0,则接下来是M对.它是单行输入,所以我不知道该怎么做.
我有一些解决方案,但有些东西告诉我这不是最好的解决方案.
void input(){
int a[100][2];
int n,m;
char ch;
cin >> n >> m;
for ( int i = 0; i < m; i++) {
cin >> ch >> a[i][0]>> ch>> a[i][1]>>ch;
}
cout << n << " " << m << " \n";
for ( int i=0; i < m; i++ ) {
cout …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何在C++中对字符串进行标记?
strtok函数不是线程安全的.Microsoft具有特定于Windows的strtok_s和CString :: Tokenize安全功能.有没有手动编码的跨平台CRT/C++库方法呢?
这是一个基本的问题,但我在思考解决方案时遇到了麻烦,所以我需要朝着正确的方向努力.
我有一个输入文件,我要把它放入一个字符串变量中.问题是我需要将这个字符串分成不同的东西.将有3个字符串和1个int.它们用":"分隔.
我知道我可以通过find()找到第一个":"的位置,但是我真的不知道如何通过字符串进行处理,对于每个东西并将它放入它自己的字符串/ int中.
该文件的实际输入如下所示:
A:PEP:909:Inventory Item
Run Code Online (Sandbox Code Playgroud)
A将成为命令我必须执行...所以这将是一个字符串.PEP是一个关键,需要是一个字符串.909是一个int.
最后一个是字符串.
所以我认为我想要做的是拥有3个字符串var和1个int并将所有这些内容放入各自的变量中.
所以我想我最终想要将这个C++字符串转换为C字符串,所以我可以使用atoi将一个部分转换为int.