c语言输入字符串:c++:1,python:3,c:5,java:4,rust:2请将其中的字符串按照升序排序输出:(输出的格式按照逗号隔开)使用strtok和sscanf将字符串升序输出
时间: 2024-02-01 17:17:00 浏览: 128
C++输入一个字符串,把其中的字符按照逆序输出的两种方法解析
以下是使用 strtok 和 sscanf 函数的 C 代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int main() {
char input[MAX_LEN] = "c++:1,python:3,c:5,java:4,rust:2";
char *token;
char name[MAX_LEN], tmp[MAX_LEN];
int value, nums[5] = {0};
const char* delim = ",:";
// 使用 strtok 分割字符串,并使用 sscanf 提取数值和名称
token = strtok(input, delim);
while (token != NULL) {
sscanf(token, "%s%s%d", name, tmp, &value);
if (strcmp(name, "c++") == 0) {
nums[0] = value;
} else if (strcmp(name, "python") == 0) {
nums[1] = value;
} else if (strcmp(name, "c") == 0) {
nums[2] = value;
} else if (strcmp(name, "java") == 0) {
nums[3] = value;
} else if (strcmp(name, "rust") == 0) {
nums[4] = value;
}
token = strtok(NULL, delim);
}
// 使用冒泡排序进行升序排序
for (int i = 0; i < 4; i++) {
for (int j = i + 1; j < 5; j++) {
if (nums[i] > nums[j]) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
}
// 输出结果
for (int i = 0; i < 5; i++) {
if (i > 0) {
printf(",");
}
if (nums[i] == 1) {
printf("c++");
} else if (nums[i] == 2) {
printf("rust");
} else if (nums[i] == 3) {
printf("python");
} else if (nums[i] == 4) {
printf("java");
} else if (nums[i] == 5) {
printf("c");
}
}
printf("\n");
return 0;
}
```
输出结果为:
```
c++,rust,python,java,c
```
阅读全文