这是我使用C ++的第一步,我正在尝试运行需要使用的功能
但是我得到这个错误:
严重性代码描述项目文件行抑制状态 错误C3861'findAndRotateBlankNumbers':标识符不正确 找到ConsoleApplication2 c:\ users \ source \ repos \ consoleapplication2 \ consoleapplication2 \ consoleapplication2.cpp 29
这是代码:
// ConsoleApplication2.cpp:定义控制台应用程序的入口点。 //
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
enum States {
needBlank,
needNumber,
collectNumbers,
};
bool finish = false;
int i = 0;
int main()
{
char data[] = { "they're 2fast 96 345 6789 a11 24x 2424" };
printf(data);
findAndRotateBlankNumbers(data);
printf(data);
system("pause");
return 0;
}
void findAndRotateBlankNumbers(char* ptr) {
char* first;
char* last;
for (uint8_t state = needBlank; *ptr; ptr++) {
switch (state) {
case needBlank:
if (*ptr == ' ') {
state = needNumber;
}
break;
case needNumber:
if (isdigit(*ptr)) {
state = collectNumbers;
first = ptr;
}
else if (*ptr != ' ') {
state = needBlank;
}
break;
case collectNumbers:
{
bool swap = false;
if (!isdigit(*ptr)) {
last = ptr - 1;
state = (*ptr == ' ' ? needNumber : needBlank);
swap = true;
}
else if (!ptr[1]) {
last = ptr;
swap = true;
}
if (swap) {
if (last != first) {
for (int8_t nums = (last - first + 1) / 2; nums--; ) {
char swap = *first;
*first++ = *last;
*last-- = swap;
}
}
}
break;
}
}
}
}
这是什么?
我已将代码的顺序更改为您建议的内容:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
enum States {
needBlank,
needNumber,
collectNumbers,
};
bool finish = false;
int i = 0;
void findAndRotateBlankNumbers(char* ptr) {
char* first;
char* last;
for (uint8_t state = needBlank; *ptr; ptr++) {
switch (state) {
case needBlank:
if (*ptr == ' ') {
state = needNumber;
}
break;
case needNumber:
if (isdigit(*ptr)) {
state = collectNumbers;
first = ptr;
}
else if (*ptr != ' ') {
state = needBlank;
}
break;
case collectNumbers:
{
bool swap = false;
if (!isdigit(*ptr)) {
last = ptr - 1;
state = (*ptr == ' ' ? needNumber : needBlank);
swap = true;
}
else if (!ptr[1]) {
last = ptr;
swap = true;
}
if (swap) {
if (last != first) {
for (int8_t nums = (last - first + 1) / 2; nums--; ) {
char swap = *first;
*first++ = *last;
*last-- = swap;
}
}
}
break;
}
}
}
}
int main()
{
char data[] = { "they're 2fast 96 345 6789 a11 24x 2424" };
printf(data);
findAndRotateBlankNumbers(data);
printf(data);
system("pause");
return 0;
}
但是现在我得到其他错误:
严重性代码描述项目文件行抑制状态 错误C4703可能未初始化的本地指针变量“第一” 二手ConsoleApplication2 c:\ users \ source \ repos \ consoleapplication2 \ consoleapplication2 \ consoleapplication2.cpp 52
?
答案 0 :(得分:1)
您要在findAndRotateBlankNumbers
中调用函数main
的定义是之后。因此,编译器在编译主函数时还不知道该函数存在。要解决此问题,您可以
findAndRotateBlankNumbers
函数上方 main
void findAndRotateBlankNumbers(char* ptr);
关于第二个错误:
编译器抱怨您在初始化时声明了变量first
而未为其分配值。您应该给它一个明智的默认值,例如char* first = nullptr;
与char* last = nullptr;
如果您的编译器不支持nullptr
,请改用NULL
;