相关疑难解决方法(0)

valgrind抱怨在c做一个非常简单的strtok

嗨,我正在尝试通过将整个文件加载到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)

c c++ valgrind tokenize strtok

2
推荐指数
2
解决办法
1311
查看次数

如何访问std :: string的每个成员?

如何访问std :: string变量中的每个成员?例如,如果我有

string buff;
Run Code Online (Sandbox Code Playgroud)

假设buffconatains "10 20 A"为ASCII内容.那我怎么能分别访问10,20和A?

c++ string

2
推荐指数
1
解决办法
2万
查看次数

减少字符串比较的时间复杂度

我有一个字典 .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++ string

2
推荐指数
1
解决办法
1198
查看次数

C++打印出限制字数

我是C++的初学者,我想知道如何做到这一点.我想写一个接受文本行的代码.例如"Hello stackoverflow是一个非常好的网站"

从输出我只想打印前三个单词,跳过其余的.

我想要的输出:"Hello stackoverflow是"

如果是Java,我会使用字符串split().至于C++,我真的不知道.他们的任何类似或C++的方法是什么?

c++

1
推荐指数
1
解决办法
1001
查看次数

C/C++中的快速字符串标记化

我正在开发一个C/C++应用程序(在Visual Studio 2010中),我需要对逗号分隔的字符串进行标记,我希望它尽可能快.目前我正在使用strtok_s.我跑了一些测试strtok_s对比sscanf,它似乎就像strtok_s是快(除非我写了一个可怕的实现:)),但我想知道如果任何人都可以提出一个更快的替代方案.

c c++ string visual-studio-2010 tokenize

1
推荐指数
2
解决办法
7036
查看次数

C++:如何构建两个空格分隔的字符串的交集字符串?

我有两个空格分隔的字符串...(X不代表相同的符号)

st1 = "abc def kok...."
st2 = "kok bbr def ffe ...."
Run Code Online (Sandbox Code Playgroud)

我想构建一个交集字符串,如下所示: common = "kok def"

在c ++中这样做的有效方法是什么?

谢谢

c++ string stringstream

1
推荐指数
1
解决办法
1974
查看次数

C++ Stringstream:接受一个字符串,但不接受存储在变量中的字符串.为什么?

我一直在尝试将输入字符串拆分为由空格描绘的较小字符串.我在这里找到了这段代码:

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.这是为什么?有办法解决吗?我已经查看了一些字符串流问题,但问题是我真的不知道我在寻找什么.

c++ stringstream

1
推荐指数
1
解决办法
2841
查看次数

如何将字符串转换为char*数组

我已经更改了我的代码,现在编译时出现这些错误:

`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++ arrays string char

1
推荐指数
1
解决办法
8961
查看次数

C++解析输入

我需要解析一个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 c++

1
推荐指数
1
解决办法
4499
查看次数

将字符串拆分为令牌 - 没有特定于操作系统的功能

可能重复:
如何在C++中对字符串进行标记?

strtok函数不是线程安全的.Microsoft具有特定于Windows的strtok_s和CString :: Tokenize安全功能.有没有手动编码的跨平台CRT/C++库方法呢?

c c++ string tokenize

1
推荐指数
1
解决办法
763
查看次数

从C++中的字符串中取出每个单词

我正在用C++编写一个方法,它将使用2个或更多单词的字符串,并使用该sleep()方法输出字符串的每个单独的单词,用大约一秒左右.我试图使用for循环和子串来做到这一点.我也不确定应该使用的正则表达式,以及如何使用它们来实现所需的输出.

我已审查这个这个,找到我的问题不同,因为我想这样做在一个循环中,而不是存储在单个子.

输入:

"这是一个例子"

期望的输出:

"这个"(暂停)"是"(暂停)"一个"(暂停)"例子".

c++ substring

1
推荐指数
1
解决办法
81
查看次数

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.

c++ string

0
推荐指数
1
解决办法
4543
查看次数