malloc动态分配字符串数组“ 一个月内的提醒”

 1 //输出一个月提醒
 2
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <string.h>
 6
 7 #define MAX_REMIND 50            //提醒的数量
 8 #define MSG_LEN 60              //提醒的长度
 9 int main(void){
10     int read_line(char str[], int n);
11     char *reminders[MAX_REMIND];
12     char day_str[3], msg_str[MSG_LEN+1];
13     int day, i ,j, num_remind = 0;
14
15     for(;;){
16         if(num_remind == MAX_REMIND){
17             printf("--No space left--\n");
18             break;
19         }
20
21         printf("Enter day and reminder:");
22         scanf("%2d",&day);
23         if (day == 0) break;
24         sprintf(day_str, "%2d",day);
25         read_line(msg_str,MSG_LEN);         //读取字符串
26
27         for(i=0;i<num_remind;i++)           //将日期靠前的提醒放在前面
28             if(strcmp(day_str,reminders[i]) < 0)    break;
29         for(j=num_remind;j>i;j--)
30             reminders[j]=reminders[j-1];
31
32         reminders[i] = malloc(2 + strlen(msg_str) + 1 );
33         if(reminders[i] == NULL)    printf("--No space left--\n");
34
35         strcpy(reminders[i],day_str);
36         strcat(reminders[i],msg_str);
37
38         num_remind++;
39
40     }
41     printf("\n Day Remind\n");
42     for(i=0;i<num_remind;i++)
43         printf("%s\n",reminders[i]);
44
45     return 0;
46 }
47
48 int read_line(char str[], int n){
49     int ch, i=0;
50     while ( (ch=getchar()) !=‘\n‘)
51         if(i<n)
52             str[i++]=ch;
53     str[i]=‘\n‘;
54     return i;
55 }
时间: 2024-11-14 06:55:38

malloc动态分配字符串数组“ 一个月内的提醒”的相关文章

将一个字符串看作一个char类型的数组

有时候我们会遇到将用户输入的一句话中的某一个字符拿出来用的问题. 我们可以将用户输入的字符串看作一个char类型的数组 比如有一个字符串string a = "hello"; 要将'e'输出怎么办? 我们将a看作一个char类型的数组,然后使用for循环来遍历这个数组,然后在控制台中输出即可 for(int i = 0;i<a.Length;i++) { Console.writeLine(a[1]); } 关键是要有将字符串看作char类型数组的思维. 小菜鸟今天的一点小心得,

写一个函数排序整个字符串数组

创建一个字符串数组,总共5个元素,每个元素最多保存30个字符, 写一个函数排序整个数组 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int i,j; char tmp[30]; char arr[5][30]={"bbbb","aaaa","dddd","wwww","eeee"

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"

php遍历字符串每一个字符转换成数组。

php:遍历字符串每一个字符,追加给新数组. <?php /*    $str[$i]:字符串变量名+下标可以取值到对应下标的字符串的值.    explode(separator,string,limit)可以以固定字符为断点转换成数组    ru */ $str = "abcde";//被遍历的字符串 $arr = array();//定义要输出的数组 for($i=0;$i<strlen($str);$i++){//遍历字符串追加给数组 $arr[] = $str[$

HDU-1004-Let the Balloon Rise(直接new一个字符串数组compareTo!)

Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 85666    Accepted Submission(s): 32330 Problem Description Contest time again! How excited it is to see balloons floating ar

Swift - 将字符串拆分成数组(把一个字符串分割成字符串数组)

在Swift中,如果需要把一个字符串根据特定的分隔符拆分(split)成字符串数组,通常有如下两种方法: 1,使用componentsSeparatedByString()方法 1 2 3 4 5 let str = "北京.上海.深圳.香港" print("原始字符串:\(str)") let splitedArray = str.componentsSeparatedByString(".") print("拆分后的数组:\(spl

java传入一个字符串 将它分割成大写字符为首的字符串数组

/* * 传入一个字符串 将它分割成大写字符为首的字符串数组 */ private ArrayList<String> splitByUpperCase(String str) { ArrayList<String> rs = new ArrayList<String>(); int index = 0; int len = str.length(); for (int i = 1; i < len; i++) { if (Character.isUpperCas

字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人

输入3个字符串,要求按由小到大的字母顺序输出 如 输入franch england china,输出结果是china england franch 三个数排序输出,比较三个数的大小怎么做? a=18 b= 9 c=30 a>b 交换 a=9 b=18 可不可以用选择法?可不可以用冒泡法?但是这里用不着 例题: string1 string2 string3 temp a=18 b= 9 c=30 b>c? 交换 b中放的是b 和 c 中小的数,c中放的是bc中大的数. 如果a<b,则输出

C++ 字符串指针与字符串数组

在做面试100题中第21题时,发现char *astr="abcdefghijk\0";和char astr[]={"abcdefghijk"};有点区别,以前一直以为是一样的,但是在该程序中采用字符串指针运行一直出错.后来在网上查查,果然发现大大的不同. 展示如何出错 分析:当你需要修改字符串时,采用指针指向该字符串编译通过但是运行出错,而采用字符串数组时不会出现这样的问题.我们知道计算机有堆栈空间供编程人员使用,第一行,astr为栈上分配的一个指针,而右边在堆上