题目56-60
- 56、字符串排序。
- 57、八进制转换为十进制。
- 58、填空练习(指向指针的指针)。
- 59、计算字符串中子串出现的次数。
- 60、时间函数
56、字符串排序。
#include "stdio.h"
#include "string.h"
int main(){
char a[20][20]={"china","korean","japan"};
for (int i=0; i<3-1; i++) {
for (int j=0; j<3-1-i; j++) {
if (strcmp(a[j], a[j+1])>0) {
char temp[20];
strcpy(temp,a[j]);
strcpy(a[j], a[j+1]);
strcpy(a[j+1],temp);
}
}
}
for (int i=0; i<3; i++) {
printf("%s\n",a[i]);
}
}
利用指针:
#include "stdio.h"
#include "string.h"
int main(){
char *str1[20],*str2[20],*str3[20];
char swap();
printf("please input three strings\n");
scanf("%s",str1);
scanf("%s",str2);
scanf("%s",str3);
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str2,str3)>0) swap(str2,str3);
printf("after being sorted\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
}
char swap(char *p1,char*p2){
char *p[20];
strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
}
运行结果:

57、八进制转换为十进制。
#include "stdio.h"
#include "string.h"
int main(){
char *p,s[6];int n;
gets(s);
p=s;
n=0;
while(*(p)!='\0'){
n=n*8+*p-'0';
p++;
}
printf("%d",n);
}
运行结果:
58、填空练习(指向指针的指针)。
int main()
{
char* s[] = { "man","woman","girl","boy","sister" };
char** q;
int k;
for (k = 0;k < 5;k++)
{
q=&s[k];/*这里填写什么语句*/
printf("%s\n", *q);
}
}
答案: q=&s[k];
运行结果:
59、计算字符串中子串出现的次数。
程序分析:字符串c1,c2,c1逐字符与c2第一个字符比较,判断是否相符,如果相同再比较其他字符直到c2中的字符全部比较完毕
#include<stdio.h>
int main()
{
char c1[]="qwer123qwe45tyu";
char c2[]="qwe";
int i=0,number=0;
while (c1[i]!='\0') {
int j=0,flag=1;
if (c1[i]==c2[j]) {
while (c2[j]!='\0') {
//printf("%c %c\n",c1[i],c2[j]);
if (c1[i]==c2[j]) {
i++;j++;
}
else {
flag=0;
break;
}
}
if (flag) {
number++;
}
}
i++;
}
printf("c1中含有%d个c2。",number);
}
利用指针:
#include<stdio.h>
int main()
{
char c1[]="qwer123qwe45tyu";char c2[]="qwe";
char *p1,*p2;p1=c1;
int number=0;
while (*p1!='\0') {
p2=c2;
int flag=1;
if (*p1==*p2) {
while (*p2!='\0') {
if (*p1==*p2) {
p1++;p2++;
}
else {
flag=0;
break;
}
}
if (flag) {
number++;
}
}
p1++;
}
printf("c1中含有%d个c2。",number);
}
运行结果:
60、时间函数
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
// 获取系统当前时间
time ( &rawtime );
//localtime()是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,返回指针
timeinfo = localtime ( &rawtime );
// asctime函数把储存的时间转换为字符串
printf ( "当前本地时间为: %s", asctime (timeinfo) );
// gmtime函数转换后的时间没有经过时区变换,是UTC时间,北京时间比UTC时间快了8小时
printf("当前本地时间为: %s",asctime(gmtime(&rawtime)));
return 0;
}
运行结果: