现在的位置: 首页 > 07 字符串入门 > 09 字符串和指针 > 正文

指针和字符串

2012年12月27日 07 字符串入门, 09 字符串和指针 ⁄ 共 490字 ⁄ 字号 暂无评论

【实例5.7】编写程序,输入1个字符串并判断该字符串是不是回文。所谓回文是顺序读和倒序读完全一样的字符串。例如,字符串“eye”是回文。
【实例5.8】编写程序,输入3个国家的国名,并输出字符串最大的国家国名。
【实例5.9】编写程序,将已有的3个国家的国名按字符串大到小的顺序排序。
【实例5.10】编写程序,输入2个字符串,并将它们按长的字符串在前、短的字符串在后的原则连接起来。

【实例5.7】编写程序,输入1个字符串并判断该字符串是不是回文。所谓回文是顺序读和倒序读完全一样的字符串。例如,字符串“eye”是回文。
【编程思路】

定义2个指针p、q,p指向第1个字符,q指向最后一个有效字符。比较这2个字符,如果相等,p指向下一个,q指向前一个,重复以上操作,直至p≥q为止。在比较的过程中如果某2个字符不相等,应立即停止比较。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
int main(int argc, char *argv[])
{
    char a[80]= {'\0'},*p=a,*q=a;
 
    printf("Input a string:\n");
    gets(p);
    while(*q!='\0')
        q++;
    q--;
    while(p<q)
        if(*p!=*q)
            break;
        else {
            p++; q--;
        }
    if(p<q)
        printf("\"%s\" is not a huiwen string.\n",a);
    else
        printf("\"%s\" is a huiwei string.\n",a);
    return 0;
}

【实例5.8】编写程序,输入3个国家的国名,并输出字符串最大的国家国名。
【编程思路】

比较2个字符串的方法是,从左起比较2个字符串中第1个对应字符不相等的字符ASCII码值大小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char a[80]= {'\0'},b[80]= {'\0'},c[80]= {'\0'};
	char *p=a,*q=b,*w=c,*t=NULL;
 
    printf("Input 3 country names:\n");
    gets(p); gets(q); gets(w); 
    t=p;
    if(strcmp(t,q)<0)  t=q;
    if(strcmp(t,w)<0)  t=w;
    printf("Maximum country name is:\n");
    puts(t);
    return 0;
}

【实例5.9】编写程序,将已有的3个国家的国名按字符串大到小的顺序排序。

【编程思路】

比a和b,若b比a大,交换a、b比a和c,若c比a大,交换a、c比b和c,若c比b大,交换b、c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char a[80]="MeiGuo",b[80]="ZhongGuo",c[80]="YingGuo",t[80]= {'\0'};
    char *p=a,*q=b,*w=c;
 
    if(strcmp(p,q)<0) {
        strcpy(t,p); strcpy(p,q); strcpy(q,t);
    }
    if(strcmp(p,w)<0) {
        strcpy(t,p); strcpy(p,w); strcpy(w,t);
    }
    if(strcmp(q,w)<0) {
        strcpy(t,q); strcpy(q,w); strcpy(w,t);
    }
    printf("Final order:\n");
    puts(p); puts(q); puts(w);
    return 0;
}

【实例5.10】编写程序,输入2个字符串,并将它们按长的字符串在前、短的字符串在后的原则连接起来。
【编程思路】

用strlen计算2个字符串长度,根据其比较结果连接字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
 
int main(int argc, char *argv[])
{
    char a[80],b[80],*p=a,*q=b;
 
    printf("Input 2 strings:(two lines)\n");
    gets(p); gets(q);
    printf("Final string is:\n");    
    if(strlen(p)>strlen(q)) {
        strcat(p,q);
        puts(p);
    } else {
        strcat(q,p);
        puts(q);
    }
    return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.