我试图标记一个输入的字符串并计算字符串中的空格。我的想法是调用一个本地函数,通过计算它们的值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++;
}
}
答案 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的原始代码。