对字符串进行标记并计算空格

时间:2018-05-04 05:08:53

标签: c++ tokenize

我试图标记一个输入的字符串并计算字符串中的空格。我的想法是调用一个本地函数,通过计算它们的值0来计算字符串中的所有空格,但不幸的是,函数在第一次尝试后中断,它忽略了字符串的更远部分。我究竟做错了什么?任何协助都将不胜感激。

#include "stdafx.h"
#include <iostream>
#include <cstring>

using namespace std;

char *next_token = NULL;

int count_spaces(const char *p);

char *p;

int main() {
    char s[81];

    cout << "Input a string : ";
    cin.getline(s, 81);

    p = strtok_s(s, ", ", &next_token);

    while (p != nullptr) {
        cout << p << endl;
        p = strtok_s(nullptr, ", ", &next_token);
    }

    count_spaces(p);

    cout << count_spaces(p);

    return 0;
}

int count_spaces(const char *p) {
    int number = 0, len;
    if (p == NULL) {
        return 0;
    }

    while (*p) {
        if (*p == '1')
            len = 0;
        else if (++len == 1)
            number++;
        p++;
    }
}

1 个答案:

答案 0 :(得分:2)

程序的标记部分有效。但是,当您致电count_spaces(p)时,p始终为NULL(或nullptr,这几乎相同)。

也许你想要这个(我省略了标记部分):

#include <iostream>
#include <cstring>

using namespace std;

int count_spaces(const char *p);

int main() {
  char s[81];
  cout << "Input a string : ";
  cin.getline(s, sizeof s);      // using sizeof s is better than repeating "81"

  cout << "Number of spaces in string: " << count_spaces(s) << endl;
  return 0;
}

int count_spaces(const char *p) {
  if (p == NULL) {
    return 0;
  }

  int nbofspaces = 0;

  while (*p) {
    if (*p == ' ') { 
      nbofspaces++;
    }
    p++;
  }

  return nbofspaces;
}

免责声明:这是糟糕的C ++代码。这是你在C中所做的,但这段代码尽可能贴近OP的原始代码。