目前的状况

  先说明一下这篇文章诞生的原因,做题目的时候碰到了CPP的输入它长这样[1, 0, -1, 0, 2, -1]实在是太不友好了,只能自己写输入处理,然后呢就有了如下代码:

#include<iostream>
#include<string>
using namespace std;
int main() {
string str;
getline(cin, str);
int res;
cin >> res;
char c;
int temp;
int index = 1;
for (int i = 0; i < str.size(); i++) {
if (str[i] == ',') {
index++;
}
}
int *pt = new int[index];
index = 0;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '[' || str[i] == ',') {
string temp_str = str.substr(i+1);
int temp2 = stoi(temp_str);
*(pt + index) = temp2;
index++;
}
}
for (int i = 0; i < index; i++) {
cout << *(pt + i);
}

}

成功的创建出了一个适合的动态数组,然后助教发话了,不能使用string容器。。。。。

现在正在疯狂诅咒助教,并且想办法补救这个程序。

To Be Continued。。。。

更新他来了

  在经过了一段时间的和char数组搏斗的过程后我成功的搞定了这个麻烦的输出,如果大家有更好的方法一定要联系我,这对我很重要!

#include<iostream>
using namespace std;
int main() {
using namespace std;
const int MAX = 1000;
char input[MAX];
cin.getline(input,MAX);
int res;
cin >> res;
char c;
int index = 1;
for (int i = 0; i < sizeof(input); i++) {
if (input[i] == ',') {
index++;
}
}
int *pt = new int[index];
index = 0;
bool flag = false;
bool negFlag = false;
int temp = 0;
for (int i = 0; i < sizeof(input); i++) {
if (input[i] == '-')
negFlag = true;
if (input[i] >= '0' && input[i]<='9') {
flag = true;
if (!flag)
temp += input[i] - '0';
else
temp = temp * 10 + input[i] - '0';
}
else if ((input[i] < '0' || input[i] > '9') && flag) {
flag = false;
if (negFlag) {
*(pt + index) = -temp;
negFlag = false;
}
else
*(pt + index) = temp;
index++;
temp = 0;
}
}
for (int i = 0; i < index; i++) {
cout << *(pt + i)<<' ';
}

}

进阶方法

在做了一天的题之后回来看了一下发现自己实在是太菜了,为什么没有想到更好的办法,下面这个是一种比较通用的cpp的特殊格式输入的处理方法,可以基本上达到split函数的效果。
由于这个代码的编译环境是msvc所以有一些动态数组的部分可能有点怪怪的

#include<iostream>
using namespace std;
int main() {
int index = 0;
int temp;
int *input = new int[1000];
char c;
c = getchar();
while (c != ']' && c != EOF) {
if (c != ' ' && c!= ',' && c != '[') {
ungetc(c, stdin);
cin >> temp;
input[index] = temp;
index++;
}
c = getchar();
}
}