博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言习题:使用数组指针和二级指针分别实现字符串数组的排序
阅读量:2433 次
发布时间:2019-05-10

本文共 2681 字,大约阅读时间需要 8 分钟。

1、实现大整数加法(要考虑正负数的情况)

//备注:负数的加法设计逻辑未实现#define _CRT_SECURE_NO_WARNINGS#include 
#include
void reserve_str(int* str, int len);void add_big_int(int* a, int* b, int len1, int len2) {
int k = 0, t = 0; int count = 0; //记录计算结果数字的位数 if (len1 > len2) {
//第一个数长度大于第二个数 while (t <= len1 - 1) {
k = a[t] + b[t]; if (k < 10) {
a[t] = a[t] + b[t]; } else {
a[t] = k % 10; a[t + 1] = a[t + 1] + (k - a[t]) / 10; } t++; } if (a[t] != 0 && a[t] > 0) {
count = t + 1; } else {
count = t; } } else {
while (t <= len2 - 1) {
k = a[t] + b[t]; if (k < 10) {
a[t] = a[t] + b[t]; } else {
a[t] = k % 10; a[t + 1] = a[t + 1] + (k - a[t]) / 10; } t++; } if (a[t] != 0 && a[t] > 0) {
count = t + 1; } else {
count = t; } } printf("超大数字A和B的和为:\n"); count--; while (count >= 0) {
printf("%d", a[count]); count--; } printf("\n");}void reserve_str(int* str, int len) {
int start = 0; char c = 0; while (start < len) {
c = str[start]; str[start] = str[len - 1]; str[len - 1] = c; start++; len--; } return;}int main() {
int c[100] = {
0 }; int a[100] = {
0 }; char data; int i = 0, j = 0; printf("请输入一个超大数字A(超过50个字节):\n"); while ((data = getchar()) != '\n'){
c[i++] = data - 48; } reserve_str(c, i); printf("请输入一个超大数字B(超过50个字节):\n"); while ((data = getchar()) != '\n') {
a[j++] = data - 48; } reserve_str(a, j); add_big_int(c, a, i, j); return 0;}

2、使用数组指针和二级指针分别实现字符串数组的排序

#define _CRT_SECURE_NO_WARNINGS#include 
#include
void sort1(char(*p1)[10], int num) //用数组指针的方法{
for (int i = num - 1; i >= 1; --i) //冒泡排序法,排列出字符串的大小 {
for (int j = 0; j < i; ++j) //每次将排序序列最大的字符串放在最后一位 {
if (strcmp(p1[j], p1[j + 1]) > 0) //如果p1[j]的字符串长度大于p1[j+1],则进行字符串地址的交换 {
char Tmp[10]; strcpy(Tmp, p1[j]); strcpy(p1[j], p1[j + 1]); strcpy(p1[j + 1], Tmp); } } } for (int i = 0; i < num; ++i) {
puts(p1[i]); }}void sort2(char** p2, int num) //用二级指针的方法{
for (int i = num - 1; i >= 1; --i) {
for (int j = 0; j < i; ++j) {
if (strcmp(p2[j], p2[j + 1]) > 0) {
char* Tmp = p2[j]; p2[j] = p2[j + 1]; p2[j + 1] = Tmp; } } } for (int i = 0; i < num; ++i) {
puts(p2[i]); }}int main(){
char arr[5][10] = {
"wwwwwww", "aaaaaaaa", "ffffffff", "eeeeeeeee", "yyyyyyyy" }; sort1(arr, 5); char* p[5] = {
"wwwwwww", "aaaaaaaa", "ffffffff", "eeeeeeeee", "yyyyyyyy" }; //二级指针参数位置传入指针数组的地址 for (int i = 0; i < 5; ++i) {
p[i] = arr[i]; //p[i]中的每个p值都是每个字符串的首地址 } sort2(p, 5); return 0;}

转载地址:http://uxxmb.baihongyu.com/

你可能感兴趣的文章
linux的signal_pending及signal
查看>>
OBJDUMP用法
查看>>
c/cplusplus通用makefile
查看>>
JavaScript-密码强度
查看>>
【SSH】1366-InCorrect string value:'\xE9\x99\x88\xE6\x96\xB0...'for column 'name' at row 1
查看>>
SpringCloud前身之微服务
查看>>
纵览全局——SSH
查看>>
纵览全局——Mybatis
查看>>
PC端-中文转拼音后续问题
查看>>
第七章-面向对象技术
查看>>
Mybatis-略识之无
查看>>
ionic 前端 - 汉字转拼音
查看>>
Ionic-与时间有关的故事-localecompare()
查看>>
Logback-spring.xml日志配置
查看>>
[Vue warn]: Property or method "name" is not defined on the instance but referenced during render
查看>>
ts:json串转换成数组
查看>>
String、StringBuffer和StringBuilder的区别
查看>>
java——职责链模式
查看>>
java_选择类排序——简单选择排序
查看>>
java_中介者模式
查看>>