C primer plus第11章(字符串和字符函数)习题(10选择排序)

来源:互联网 发布:电子证书制作软件 编辑:程序博客网 时间:2024/05/20 08:21
#include <stdio.h>int main(int argc,char *argv[]){    char note[] = "abcdef";    //++note;不能对note++    char *a;    a = note;    puts(++a);//bcdef    puts(a++);//bcdef    puts(a);//cdef    return 0;}


7.

#include <stdio.h>#include <string.h>#define M1 "How are ya,sweetie"char M2[40] = "Beat the clock.";char * M3 = "chat";int main(void){    char words[80];    printf(M1);    puts(M1);    puts(M2);    puts(M2 + 1);    strcpy(words,M2);    strcat(words,"Win a toy.");    puts(words);    words[4] = '\0';    puts(words);    while(*M3)        puts(M3++);//最后一次打印空字符    puts(--M3);    puts(--M3);    M3 = M1;    puts(M3);    return 0;}

打印结果

How are ya,sweetieHow are ya,sweetie
Beat the clock.
eat the clock.
Beat the clock.Win a toy.
Beat
chat
hat
at
t

t
at
How are ya,sweetie


9.

#include <stdio.h>#include <string.h>int mystrlen(char *p);int main(void){    char words[] = "sdsaddssad";    printf("%d",mystrlen(words));    return 0;}int mystrlen(const char *p) {    int i= 0;    while(*p++) {        i++;    }    return i;}



10.

#include <stdio.h>#include <string.h>char* hasspace(char *p);int main(void){    char words[] = "sdsaddss ad";    printf("%s",hasspace(words));    return 0;}char* hasspace(const char *p){    while(!isspace(*p))    {        p++;    }    if(*p == '\0')    {        return NULL;    }    return p;}

11.

#include <stdio.h>#include <string.h>#include <ctype.h>#define ANSWER "GRANT"#define MAX 40int main(void){    char try[MAX];    char *p = try;    puts("Who is buried");    gets(try);    do    {        if(islower(*p))        {            *p = toupper(*p);        }    }    while(*p++);    while(strcmp(try,ANSWER) != 0)    {        puts("No");        gets(try);    }    puts("Yes");    return 0;}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

编程

1

#include <stdio.h>int main(void){    char a[90];    my_input(a);    puts(a);    return 0;}int my_input(char * pt){    gets(pt);}

2

#include <stdio.h>#define N 20char* my_input(char * pt);int main(void){    char a[N+1];    my_input(a);    puts(a);    return 0;}char* my_input(char * pt){    int i;    char ch;    for(i=0; i<N; i++)    {        ch = getchar();        if(ch != EOF && !isspace(ch))        {            pt[i] = ch;        }        else        {            break;        }    }    if(ch == EOF || isspace(ch))        return NULL;    else    {        pt[i] ='\0';        return pt;    }}

3.自己

#include <stdio.h>#define N 20char* my_input(char * pt);int main(void){    char a[N+1];    my_input(a);    puts(a);    return 0;}char* my_input(char * pt){    char p[N+1];    char *pp = p;    gets(p);    //puts(pp);    int c = 0;    do    {        if(c == 0 && !isspace(*pp))        {            c = 1;        }        if(c == 1 && isspace(*pp))        {            *pt = '\0';            break;        }        if(!isspace(*pp))        {            *pt = *pp;            pt++;        }    }while(*pp++);    if(!isspace(pt)) {        *pt = '\0';    }    return pt;}
答案

#include <stdio.h>#define LEN 80char* getword(char * str);int main(void){    char input[LEN];    char *chk;    while(getword(input) != NULL) {        puts(input);    }    puts("Done.\n");    return 0;}char* getword(char * str){    int i;    int ch;    while((ch = getchar()) != EOF && !isspace(ch)) {        *str++ = ch;//下面2行与此等价        //*str = ch;        //str++;    }    *str = '\0';    if(ch == EOF) {        return NULL;    }    //去除第一个空行后的所有字符    while(ch != '\n') {        ch = getchar();    }    return str;}

4.

#include <stdio.h>char* search_str(char * str,char * target);int main(void){    char str[10];    char target[50];    char *pos;    while(gets(str) && str[0] != '\0' && gets(target) && target[0]!='\0')    {        pos = search_str(str,target);        printf("%p\n",pos);        puts(pos);    }    return 0;}char* search_str(char * str,char * target){    int n = strlen(str);    int m = strlen(target);    int i,j;    char *pos = NULL;    for(i=0,j=0; i<n,j<m; j++)    {        if(str[i] == target[j])        {            pos = pos==NULL ? &str[i] : pos;            i++;        }        else        {            pos = i != n ? NULL : pos;            i =0;        }    }    return pos;}

5.

#include <stdio.h>int is_within(char ch,char * target);int main(void){    char ch;    char target[50];    int isexist;    while((ch = getchar()) && getchar() && gets(target) && target[0]!='\0')    {        isexist = is_within(ch,target);        printf("%d\n",isexist);    }    return 0;}int is_within(char ch,char * target){    do    {        if(ch == *target)        {            return 1;        }    }    while(*target++!= '\0');    return 0;}

6.

#include <stdio.h>void mystrncpy(char * str1,char * str2,int len);int main(void){    char str1[100];    char str2[100];    while(gets(str1) && str1[0] != '\0' && gets(str2) && str2[0]!='\0')    {        mystrncpy(str1,str2,20);        printf("%s",str1);    }    return 0;}void mystrncpy(char * str1,char * str2,int len){    int i,j;    while(*str1!='\0')    {        str1++;    }    for(i=0; i<len; i++)    {*str1++ = (*str2 != '\0') ? *str2++ : '\0';//与下面的等价        /*if(*str2 != '\0')        {            *str1 = *str2;            str2++;        }        else        {            *str1 ='\0';        }        str1++;*/    }}


7.

#include <stdio.h>char* string_in(char * target,char * str);int main(void){    char str[10];    char target[50];    char *pos;    while(gets(str) && str[0] != '\0' && gets(target) && target[0]!='\0')    {        pos = string_in(str,target);        printf("%p\n",pos);        puts(pos);    }    return 0;}char* string_in(char * target,char * str){    int n = strlen(str);    int m = strlen(target);    int i,j;    char *pos = NULL;    for(i=0,j=0; i<n,j<m; j++)    {        if(str[i] == target[j])        {            pos = (pos==NULL) ? &str[i] : pos;            i++;        }        else        {            pos = (i == n) ?  pos : NULL;            i =0;        }    }    return pos;}

8.

#include <stdio.h>char* str_anti(char * str);int main(void){    char target[50];    while(gets(target) && target[0]!='\0')    {        puts(str_anti(target));    }    return 0;}char* str_anti(char * str){    int l = strlen(str);    int i;    char temp;    for(i=0; i<l; i++)    {        if(i==(l/2))        {            break;        }        temp = str[i];        str[i] = str[l-1-i];        str[l-1-i] = temp;    }    return str;}

9.

#include <stdio.h>void del_space(char * str);int main(void){    char target[50];    while(gets(target) && target[0]!='\0')    {        del_space(target);        puts(target);    }    return 0;}void del_space(char * str){    char *temp = str;    if(isspace(*temp))    {        do        {            *temp = *(temp+1);        }        while(*temp++ != '\0');    }    //尾递归    if(*str != '\0')    {        del_space(++str);    }}

10

#include <stdio.h>#define ROW 3#define COL 50int main(void){    int i,j,tem,flag;    char target[ROW][COL];    int temp[ROW];    char ch;    for(i=0; i<ROW; i++)    {        gets(&target[i]);        if(target[i][0]==EOF)        {            break;        }    }    printf("请输入选择:\n");    while((ch = getchar()) != 'q')    {        getchar();        for(i=0; i<ROW; i++)        {            temp[i] = i;        }        if(ch != '1')        {            //选择排序            for(i=0; i<ROW-1; i++)            {                for(j=i+1; j<ROW; j++)                {                    //1:正常  2:asc||顺序  3:长度顺序  4:第一个字符串的长度                    if((strcmp(target[temp[i]],target[temp[j]]) > 0 && ch == '2') ||                        (strlen(target[temp[i]])>strlen(target[temp[j]]) && ch == '3') ||                        (fstrlen(target[temp[i]])>fstrlen(target[temp[j]]) && ch == '4'))                    {                        tem = temp[i];                        temp[i] = temp[j];                        temp[j] = tem;                    }                }            }        }        for(i=0; i<ROW; i++)        {            puts(&target[temp[i]]);        }    }    return 0;}//字符串中第一个单词的长度int fstrlen(char* str){    int flag = 0;    while(*str != '\0')    {        if(flag== 0 && isspace(*str))        {            str++;            continue;        }        else if(flag >0 && isspace(*str))        {            break;        }        flag++;        str++;    }    return flag;}

11

#include <stdio.h>#include <ctype.h>int main(void){    char c;    int i,j,k,l,m,n,flag;    i=j=k=l=m=flag =0;    //CTRL+Z为EOF    while((c = getchar()) != EOF)    {        if(isupper(c))        {            i++;        }        else if(islower(c))        {            j++;        }        else if(ispunct(c))        {            k++;        }        else if(isdigit(c))        {            l++;        }        if(flag == 0 && !isspace(c))        {            flag = 1;            m++;        }        else if(flag != 0 && isspace(c))        {            flag = 0;        }    }    printf("i=%d,j=%d,k=%d,l=%d,m=%d",i,j,k,l,m);    return 0;}

12

#include <stdio.h>int main(int argc,char *argv[]){    int i;    for(i=argc-1;i>=0;i--)        puts(argv[i]);    return 0;}

13

#include <stdio.h>#include <stdlib.h>;#include <math.h>int main(int argc,char *argv[]){    //必须引入<stdlib.h> 要不atof错误    double num = atof(argv[1]);    int n = atoi(argv[2]);    printf("%lf的%d次方等于%lf",num,n,pow(num,n));    return 0;}

14(未考虑正负等情况)

#include <stdio.h>#include <stdlib.h>;#include <math.h>int main(){    printf("%d",myatoi("2222"));    return 0;}int myatoi(char* ch) {    int i;    int n = strlen(ch);    int total=0;    for(i=n-1;i>=0;i--) {        //也可直接-48代替'0'(asc||为48)所有的数字-48的ASCII等于它对应的数字        total = i * 10 + (ch[i]-'0') ;    }    return total;}

15

#include <stdio.h>#include <stdlib.h>;#include <ctype.h>int main(int argc,char *argv[]){    int i,j,k,l;    for(i=0,j=0; i<argc; i++)    {        if(strcmp(argv[i],"-p") == 0)        {            for(k=0; k<argc; k++)            {                puts(argv[k]);            }        }        else if(strcmp(argv[i],"-u") == 0)        {            for(k=0; k<argc; k++)            {                for(l=0; l<strlen(argv[k]); l++)                {                    if(islower(argv[k][l]))                    {                        argv[k][l] = toupper(argv[k][l]);                    }                }                puts(argv[k]);            }        }        else if(strcmp(argv[i],"-l") == 0)        {            for(k=0; k<argc; k++)            {                for(l=0; l<strlen(argv[k]); l++)                {                    if(isupper(argv[k][l]))                    {                        argv[k][l] = tolower(argv[k][l]);                    }                }                puts(argv[k]);            }        }    }    return 0;}



原创粉丝点击