我有一点问题,
我有一个像这样的字符数组:
char buff[256] = { "2 22 3 14 5 8 23 45 2 7 88"};
我需要做的是:
在这个例子中,第一个数字是2,所以我需要对这个数组DESC进行排序
我想创建一个int数组并将数字从char buff复制到int数组但我无法弄清楚如何执行此操作。
在int数组中对这些数据进行排序很容易。
我试过这样的事情:
int array[256];
for (int i = 0; i<26; i++)
array[i] = atoi(&buff2[i]);
,结果不太好
array[0]: 2
array[1]: 22
array[2]: 22
array[3]: 2
array[4]: 3
array[5]: 3
array[6]: 14
array[7]: 14
array[8]: 4
array[9]: 5
array[10]: 5
array[11]: 8
array[12]: 8
array[13]: 23
array[14]: 23
array[15]: 3
array[16]: 45
array[17]: 45
array[18]: 5
array[19]: 2
array[20]: 2
array[21]: 7
array[22]: 7
array[23]: 88
array[24]: 88
array[25]: 8
答案 0 :(得分:1)
对于'C'答案,我会使用wsCSV
,因为它会告诉您解析后的数字在缓冲区中的结束位置:
strtol
打印:
#include <stdio.h>
#include <stdlib.h>
int main() {
char buff[] = "2 22 3 14 5 8 23 45 2 7 88";
char* p=buff;
for(;;) {
char* ep; // end pointer
int n = strtol(p, &ep, 0);
// if ep == p, no parsing took place
if(p != ep) {
// parsing succeeded
printf("%d\n", n);
}
if(!*ep) break; // check if we hit the end of the string
p = ep + 1; // advance to the next character
}
}
答案 1 :(得分:1)
对于C ++,您可能希望将文本转换为std::istringstream
,然后将其视为输入流:
const char buff[] = { "2 22 3 14 5 8 23 45 2 7 88"};
const std::string text(buff);
std::vector<int> database;
std::istringstream buf_stream(text);
int value;
while (buf_stream >> value)
{
database.push_back(value);
}
对于升序和降序排序,您可以编写比较函数并将其传递给std::sort
。