#include<stdio.h> #include<string.h> int main() { char city[5][20],city1[20]; int i,j; for(i=0;i<5;i++) { scanf("%s",&city[i]); } for(i=1;i<5;i++) { for(j=0;j<5-i;j++) { if(strcmp(city[j],city[j+1]>0)) { strcpy(city1,city[j]); strcpy(city[j],city[j+1]); strcpy(city[j+1],city1); } } } for(i=0;i<5;i++) { printf("%s\n",city[i]; } return 0; }
时间: 2024-03-04 12:53:35 浏览: 80
这是一个使用冒泡排序对字符串数组进行排序的程序,其中city是一个二维字符数组,用于存储5个城市的名称,city1是一个字符数组,用于进行字符串交换操作。程序的执行流程如下:
1. 初始化city和city1数组,以及i和j变量。
2. 使用for循环输入5个城市的名称,将城市名称存储到city数组中。
3. 使用两层for循环对city数组进行冒泡排序,即比较相邻的两个城市名称字符串,如果前面的字符串比后面的字符串大,则进行字符串交换操作。
4. 使用for循环输出排好序的城市名称。
注意事项:程序中有一个语法错误,即第三个for循环中printf函数的语句缺少右括号。正确的语句应该是 printf("%s\n",city[i]);。另外,scanf函数中不需要使用&符号获取字符串,因为字符串本身就是一个字符数组,而不是一个字符变量。
相关问题
C语言从json字符串中取出子json字符串,使用json_object.h
可以使用第三方库,例如 json-c,来解析 JSON 字符串,然后取出需要的子 JSON 对象。
以下是一个示例代码:
```c
#include <stdio.h>
#include <json-c/json.h>
int main() {
const char *json_str = "{\"person\":{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}}";
json_object *root = json_tokener_parse(json_str);
if (root != NULL) {
json_object *person;
if (json_object_object_get_ex(root, "person", &person)) {
json_object *name;
json_object *age;
json_object *city;
if (json_object_object_get_ex(person, "name", &name)) {
printf("Name: %s\n", json_object_get_string(name));
}
if (json_object_object_get_ex(person, "age", &age)) {
printf("Age: %d\n", json_object_get_int(age));
}
if (json_object_object_get_ex(person, "city", &city)) {
printf("City: %s\n", json_object_get_string(city));
}
}
json_object_put(root);
}
return 0;
}
```
以上代码可以从 JSON 字符串中取出 "person" 子 JSON 对象,然后再从 "person" 中取出 "name"、"age"、"city" 三个子字符串并打印输出。请注意,这里使用 json_tokener_parse 函数将 JSON 字符串解析成 json_object 对象,然后使用 json_object_object_get_ex 函数获取具体的子 JSON 对象和子字符串。最后使用 json_object_put 函数释放对象内存空间。
请注意,使用 json-c 库需要在编译时链接该库,例如使用 gcc 编译时需要加上 `-ljson-c` 参数。
请按照城市的名字(拼音)进行升序排序。 文本文件city.txt中存储了10个城市的名字, (1)请从city.txt中读取这10个城市的名字并输出在屏幕上; (2)然后按照升序排序,把排序结果输出在屏幕上。 c语言
好的,以下是C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 100
int compare(const void *a, const void *b) {
const char **ia = (const char **)a;
const char **ib = (const char **)b;
return strcmp(*ia, *ib);
}
int main() {
char cities[10][MAX_LINE_LENGTH];
int i, j;
FILE *fp = fopen("city.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n");
return 1;
}
// 读取城市列表
for (i = 0; i < 10; i++) {
if (fgets(cities[i], MAX_LINE_LENGTH, fp) == NULL) {
break;
}
cities[i][strcspn(cities[i], "\r\n")] = '\0'; // 去掉换行符
}
// 输出原始城市列表
printf("原始城市列表:\n");
for (i = 0; i < 10; i++) {
printf("%s\n", cities[i]);
}
// 排序并输出
qsort(cities, i, sizeof(cities[0]), compare);
printf("排序后的城市列表:\n");
for (j = 0; j < i; j++) {
printf("%s\n", cities[j]);
}
fclose(fp);
return 0;
}
```
解释一下代码:
首先,我们定义了一个 `compare` 函数,用于比较两个字符串的大小关系。这个函数将被传递给 `qsort` 函数用于排序。
然后,在 `main` 函数中,我们定义了一个二维数组 `cities`,用于存储城市列表。我们使用 `fopen` 函数打开 `city.txt` 文件,并使用 `fgets` 函数读取文件中的每一行城市名称,并将它们存储在 `cities` 数组中。在读取每一行时,我们使用 `strcspn` 函数去掉行末的换行符。
接下来,我们使用一个 `for` 循环遍历 `cities` 数组,并使用 `printf` 函数输出每个城市的名称。
然后,我们使用 `qsort` 函数对城市列表进行排序,这将按照升序对城市进行排序。
最后,我们再次使用 `for` 循环遍历 `cities` 数组,并使用 `printf` 函数输出每个城市的名称。
阅读全文