6-11 查找星期
本题要求实现函数,可以根据下表查找到星期,返回对应的序号。
参考思路及代码
//本题利用<string.h>文件中的strcmp函数判断两字符串是否一致,如果一致则返回0
int getindex( char *s ) {
if(strcmp(s,"Sunday")==0) {
return 0;
}
if(strcmp(s,"Monday")==0) {
return 1;
}
if(strcmp(s,"Tuesday")==0) {
return 2;
}
if(strcmp(s,"Wednesday")==0) {
return 3;
}
if(strcmp(s,"Thursday")==0) {
return 4;
}
if(strcmp(s,"Friday")==0) {
return 5;
}
if(strcmp(s,"Saturday")==0) {
return 6;
}
else {
return -1;
}
}
6-12 输出月份英文名
本题要求实现函数,可以返回一个给定月份的英文名称。
参考思路及代码:
//可利用switch语句
char* getmonth(int n) {
switch(n) {
case 1: return "January";break;
case 2: return "February";break;
case 3: return "March";break;
case 4: return "April";break;
case 5: return "May";break;
case 6: return "June";break;
case 7: return "July";break;
case 8: return "August";break;
case 9: return "September";break;
case 10: return "October";break;
case 11: return "November";break;
case 12: return "December";break;
default: return "wrong input!";
}
}
6-13 字符串的连接
本题要求实现一个函数,将两个字符串连接起来。
参考思路及代码:
//利用<string.h>中的strcat函数即可
char *str_cat( char *s, char *t ) {
return strcat(s,t);
}
6-14 指定位置输出字符串
本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。
参考思路及代码:
//注意 ch1找不到, ch2找到 时的情况,需要返回'\0'字符
char *match( char *s, char ch1, char ch2 ){
char* a = strchr(s,ch1);
char* b = strchr(s,ch2);
if(a==0) {
printf("\n");
return "\0";
}
else if(b==0) {
printf("%s\n",a);
}
else{
char *p;
for(p=a;p<=b;p++) {
printf("%c",*p);
}
printf("\n");
}
return a;
}
6-15 查找子串
本题要求实现一个字符串查找的简单函数。
参考思路及代码:
//利用指针递增判断t字符串是否和s字符串的片段完全一致
char *search(char *s, char *t) {
char *p = s;
while(*p!='\0') {
char* b = t;
int flag = 0;
int i=0;
while(*(p+i)==*b) {
i++;
b++;
if(*b=='\0') {
flag = 1;
break;
}
}
if(flag) {
return p;
}
p++;
}
return NULL;
}
6-16 计算最长的字符串长度
本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。
参考思路及代码:
//可利用<string.h>中的strlen函数求字符串的长度,该函数只计算'\0'之前的字符
int max_len( char *s[], int n ) {
int max_length = 0;
for(int i=0;i<n;i++) {
int a = strlen(s[i]);
max_length = a>max_length?a:max_length;
}
return max_length;
}
7-1 英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
参考思路及代码:
//本思路利用选择排序,每次选择出最大长度字符串对应的index并输出该字符串
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 11
#define MAX_ARRAY_LEN 21
char* array[MAX_ARRAY_LEN];
int array_length[MAX_ARRAY_LEN];
int array_len=0;
//内存空间申请
void initMemory() {
int i;
for(i=0;i<MAX_ARRAY_LEN;i++) {
array[i] = (char*)malloc(sizeof(char)*MAX_LEN);
}
}
//数据读取
void readStrings() {
array_len=0;
while(scanf("%s",array[array_len])!=EOF) {
if(strcmp(array[array_len],"#")==0) {
break;
}
array_length[array_len] = strlen(array[array_len]);
array_len++;
}
}
//选择排序并输出
void mySort() {
int i,j;
for(i=0;i<array_len;i++) {
int min_value = 0x0fff;
int index = 0;
for(j=0;j<array_len;j++) {
if(array_length[j]<min_value) {
min_value = array_length[j];
index = j;
}
}
printf("%s ", array[index]);
array_length[index]= 0x0fff;
}
}
void freeMemory() {
int i;
for(i=0;i<MAX_ARRAY_LEN;i++) {
free(array[i]);
}
}
int main() {
initMemory();
readStrings();
mySort();
freeMemory();
}
7-2 藏头诗
本题要求编写一个解密藏头诗的程序。
参考思路及代码:
//注意中文字符的表达方式,一个中文字符需要两个字节表达,直接用连续的两个字符表示即可。
#include <stdio.h>
#define MAX_ARRAY_LEN 1024
char array[4][MAX_ARRAY_LEN];
int main() {
int i=0;
for(;i<4;i++) {
scanf("%s", array[i]);
printf("%c%c",array[i][0],array[i][1]);
}
printf("\n");
}
7-5 组织星期信息
//本题参考6-11
#include <stdio.h>
#define MAX_ARRAY_LEN 1024
char array[MAX_ARRAY_LEN];
int getindex( char *s ) {
if(strcmp(s,"Sunday")==0) return 1;
if(strcmp(s,"Monday")==0) return 2;
if(strcmp(s,"Tuesday")==0) return 3;
if(strcmp(s,"Wednesday")==0) return 4;
if(strcmp(s,"Thursday")==0) return 5;
if(strcmp(s,"Friday")==0) return 6;
if(strcmp(s,"Saturday")==0) return 7;
return -1;
}
int main() {
int i;
scanf("%d",&i);
while(i--) {
scanf("%s",array);
printf("%d\n",getindex(array));
}
}