计算机考研复试--牛客网--C语言练习--Day6

1 背景

第6天的题目终于是中文题目了,而且看着还挺不难的样子……

2 题目:后缀子串排序

题目描述

对于一个字符串,将其后缀子串进行排序,例如grain 其子串有: grain rain ain in n 然后对各子串按字典顺序排序,即: ain,grain,in,n,rain

输入描述:

每个案例为一行字符串。

输出描述:

将子串排序输出

意思大致是:
对于每种情况,输出三行,分别显示该情况的加法(a+b)、减法(a-b)和乘法(a×b)的精确结果,每行一个结果。

示例

输入

grain

输出

ain
grain
in
n
rain

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char s[200], *p;
int len, i, m;
while(scanf("%s", s) != EOF) { //将字符串输入到字符数字s中
len = strlen(s); //求出字符数组中输入的字符长度
char a[len][len+1];
for(i = 0; i < len; i++) {
strcpy(a[i], s+i); //将字符串的后缀字串存储在a[i]开始的单元中
}
qsort(a, len, sizeof(a[0]), strcmp); //对数组a存储的后缀字串进行排序
for(i = 0; i < len; i++) {
printf("%s\n", a[i]);
}
}
return 0;
}

3 分析

头文件#include <stdlib.h>中的常用函数

double atof(const char *str) 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)
int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)
void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针
void free(void *ptr) 释放之前调用 calloc、malloc 或 realloc 所分配的内存空间
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void , const void)) 数组排序
int abs(int x) 返回 x 的绝对值
int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。

头文件#include <string.h>中的常用函数

char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾
int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较
int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字节
char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest
char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符
size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符
char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。

×

喜欢就点赞,疼爱就打赏