1263 - C语言10.33

用指向指针的指针的方法实现对5个字符串的排序和输出。本题中的排序指的是字符串的字典序。

题目输入

共5行,每一行有一个不包含空格的字符串。输入保证每个字符串的长度不超过100。

题目输出

共5行,与输入的格式相同,输出排序后的字符串。

请注意行尾输出换行。

输入/输出样例

题目输入

January
February
March
April
May

题目输出

April
February
January
March
May

C语言解答

#include<stdio.h>
#include<string.h>
int main()
{
	char str[5][100];
	char *p[5];
	char temp[100];
	char *t=temp;
	int i;
	int j;
	for(i=0;i<5;i++)
	{
		gets(str[i]);
		p[i]=str[i];
	}
	for(i=0;i<4;i++)
	{
		for(j=i+1;j<5;j++)
		{
			if(strcmp(p[i],p[j])>0)
			{
				t=p[i];
				p[i]=p[j];
				p[j]=t;
			}
		}
	}
	for(i=0;i<5;i++)
	{
		puts(p[i]);
	}
	return 0;
}

C++解答

#include <stdio.h>
#include <string.h>
int main() {
	void sort(char *strings[], int n);
	char *strings[5];
	char buffer[5][101];
	int i;
	for (i = 0;i < 5;i++) {
		scanf("%s", buffer[i]);
		strings[i] = buffer[i];
	}
	sort(strings, 5);
	for (i = 0;i < 5;i++)
		printf("%s\n", strings[i]);
	return 0;
}
/* 字符串选择排序函数 */
void sort(char *strings[], int n) {
	int i, j;
	char **p, *temp;
	for (i = 0;i < n - 1;i++) {
		p = strings + i;
		for (j = i + 1;j < n;j++) {
			if (strcmp(strings[j], *p) < 0)
				p = strings + j;
		}
		temp = *p; *p = strings[i]; strings[i] = temp;
	}
}

时间限制 1 秒
内存限制 32 MB
讨论 统计
上一题 下一题