以文本方式查看主题

-  课外天地 李树青  (http://www.njcie.com/bbs/index.asp)
--  C语言程序设计  (http://www.njcie.com/bbs/list.asp?boardid=29)
----  [推荐]第七课代码讲义:字符串数组  (http://www.njcie.com/bbs/dispbbs.asp?boardid=29&id=1584)

--  作者:admin
--  发布时间:2015/11/15 21:21:55
--  [推荐]第七课代码讲义:字符串数组

字符串数组
常规输出
int main()
{
    char str[]="Hello world!";
    printf("%s",str);
    return 0;
}

逐个字符打印
int main()
{
    int i;
    char str[]="Hello world!";
    for(i=0;i<=strlen(str);i++)
    {
        printf("%d\\n",str[i]);
    }
    return 0;
}

如果越界了会怎么样?


输入字符串
int main()
{
    char str[100];
    scanf("%s",str);
    printf("%s",str);
    return 0;
}

字符串专用函数
int main()
{
    char str[100];
    gets(str);
    puts(str);
    return 0;
}


int main()
{
    char str1[100],str2[100];
    gets(str1);
    gets(str2);
    strcat(str1,str2);//catenate
    puts(str1);
    return 0;
}


int main()
{
    char str1[100],str2[100];
    gets(str1);
    gets(str2);
    puts(str1);
    strcpy(str1,str2);//copy
    puts(str1);
    return 0;
}

小心目标数组的大小要能容纳


int main()
{
    char str1[100],str2[100];
    gets(str1);
    gets(str2);
    if(strcmp(str1,str2)>0) //compare
        puts(">");
    else if(strcmp(str1,str2)==0)
        puts("=");
    else
        puts("<");
    return 0;
}


在三个字符串中找到最大的那个
 char string[20],str[3][20];
    int i;
    for(i=0; i<3; i++)
        gets(str[i]);
    if(strcmp(str[0],str[1])>0)
        strcpy(string,str[0]);
    else
        strcpy(string,str[1]);
    if(strcmp(str[2],string)>0)
        strcpy(string,str[2]);
    printf("\\nThe largest string is:\\n%s\\n",string);

 

练习:
1)输入一行字符,统计其中的单词个数,单词间空格分开
这段代码有问题,假设一定是空格开头
    char str[]="  this is a   book   ";
    int i=0,words=0;;
    for(i=0;i<strlen(str);i++)
    {
        if(str[i]>=\'a\' && str[i-1]<=\'z\')
            words++;
    }
    printf("%d",words);


#include <stdio.h>
void main()
{
    char str[100];
    int i=0,words=0,flag=0;
    gets(str);
    for(i=0; i<strlen(str); i++)
    {
        if(flag==0 && str[i]!=\' \')
        {
            flag=1;
            words++;
        }
        if(str[i]==\' \')
            flag=0;
    }

    printf("There are %d words in the line\\n",words);
}


#include <stdio.h>
void main()
{
    char str[100];
    int i,num=0,word=0;
    char c;
    gets(str);
    for(i=0; (c=str[i])!=\'\\0\'; i++)
        if(c==\' \')
            word=0;
        else if(word==0)
        {
            word=1;
            num++;
        }
    printf("There are %d words in the line\\n",num);
}

2)自己实现复制
#include <stdio.h>
#include <string.h>
int main()
{
    char s1[100],s2[100];
    int i;
    printf("input s2:");
    scanf("%s",s2);
    for (i=0; i<=strlen(s2); i++)
        s1[i]=s2[i];
    printf("s1:%s\\n",s1);
    return 0;
}


3)自己实现追加
#include <stdio.h>
int main()
{
    char s1[80],s2[40];
    int i=0,j=0;
    printf("input string1:");
    scanf("%s",s1);
    printf("input string2:");
    scanf("%s",s2);
    while (s1[i]!=\'\\0\')
        i++;
    while(s2[j]!=\'\\0\')
        s1[i++]=s2[j++];
    s1[i]=\'\\0\';
    printf("\\nThe new string is:%s\\n",s1);
    return 0;
}