《明解C语言》示例代码和练习代码[第9章]

第9章 字符串的基本认识


示例代码:


示例代码9-1

/*
    显示字符串字面长度 
*/

#include 

int main(void)
{
    printf("sizeof(\"123\")        = %u\n",        (unsigned)sizeof("123"));
    printf("sizeof(\"AB\\tC\")      = %u\n",        (unsigned)sizeof("AB\tC"));
    printf("sizeof(\"abc\\0def\")   = %u\n",        (unsigned)sizeof("abc\0def"));
    
    return (0);    
}

示例代码9-2

/*
    保存字符串的数组 
*/

#include 

int main(void)
{
    char str[4];        //保存字符串的数组
    
    str[0] = 'A';       // 赋值
    str[1] = 'B';       // 赋值
    str[2] = 'C';       // 赋值
    str[3] = '\0';      // 赋值
    
    printf("字符串str为%s。\n", str);        // 显示
    
    return(0);  
}

示例代码9-3

/*
    保存字符串的数组(初始化) 
*/

#include 

int main(void)
{
    char str[] = "ABC";        //初始化    
    
    printf("字符串str为%s。\n", str);        // 显示
    
    return (0); 
}

示例代码9-4

/*
    询问名字并显示问候语(读取字符串) 
*/

#include 

int main(void)
{
    char name[40];
    
    printf("请输入您的名字:");
    scanf("%s", name);
    
    printf("您好, %s 先生/女士!!\n", name);    
    
    return (0);
}

示例代码9-5

/*
    格式化字符串“12345”并显示 
*/

#include 

int main(void)
{
    char str[] = "12345";
    
    printf("%s\n",    str);        // 原样输出
    printf("%3s\n",   str);        // 至少显示3位 
    printf("%.3s\n",  str);        // 最多显示3位 
    printf("%8s\n",   str);        // 右对齐 
    printf("%-8s\n",  str);        // 左对齐
    
    return (0);   
}

示例代码9-6

/*
    字符串数组 
*/

#include 

int main(void)
{
    int i;
    char cs[][6] = {"Turbo", "NA", "DOHC"};
    
    for (i = 0; i < 3; i++)
        printf("cs[%d] = \"%s\"\n", i, cs[i]);  
        
    return (0);
}

示例代码9-7

/*
    读取并显示字符串数组 
*/

#include 

int main(void)
{
    int i;
    char cs[3][128];
    
    for (i = 0; i < 3; i++) {
        printf("cs[%d]: ", i);
        scanf("%s", cs[i]);
    }    
    
    for (i = 0; i < 3; i++)
        printf("cs[%d] = \"%s\"\n", i, cs[i]);
        
    return (0);
}

示例代码9-8

/*
    判断字符串的长度 
*/

#include 

// 返回字符串str的长度
unsigned str_length(const char str[])
{
    unsigned len = 0;
    
    while (str[len])
        len++;
     
    return (len);        
} 

int main(void)
{
    char st[100];
    
    printf("请输入字符串:");
    scanf("%s", st);
    
    printf("字符串%s的长度为%u。\n", st, str_length(st));
    
    return (0);   
}

示例代码9-9

/*
    依次显示字符串中的字符 
*/

#include 

// 显示字符串(不换行)
void put_string(const char str[])
{
     unsigned i = 0;
     
     while (str[i])
         putchar(str[i++]);
} 

int main(void)
{
    char str[100];
    
    printf("请输入字符串:");
    scanf("%s", str);
    
    put_string(str);
    putchar('\n');
    
    return (0);    
}

示例代码9-10

/*
    计算字符串中的数字字符数 
*/

#include 

// 将字符串str中的数字字符保存至数组cnt
void str_dcount(const char str[], int cnt[]) 
{
    unsigned i = 0;
    while (str[i]) {
        if (str[i]) {
            if (str[i] >= '0' && str[i] <= '9')
                cnt[str[i] - '0']++;
            i++;
        }
    }     
}

int main(void)
{
    int i;
    int dcnt[10] = {0};
    char str[100];
    
    printf("请输入字符串:");
    scanf("%s", str);
    
    str_dcount(str, dcnt);
    
    puts("数字字符的出现次数");
    for (i = 0; i < 10; i++)
        printf("'%d' : %d\n", i, dcnt[i]);
    
    return (0);    
}

示例代码9-11

/*
    字符串数组 (函数版)
*/

#include 

// 显示字符串数组
void put_strary(const char st[][6], int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("st[%d] = \"%s\"\n", i, st[i]);     
} 

int main(void)
{
    char cs[][6] = {"Turbo", "NA", "DOHC"};
    
    put_strary(cs, 3);  
        
    return (0);
}

示例代码9-12

/*
    显示字符串数组 
*/ 

#include 

// 显示字符串数组(逐个显示字符)
void put_strary2(const char st[][6], int n)
{
    int i;
    
    for (i = 0; i < n; i++) {
    	int j = 0;
    	printf("st[%d] = \"", i);
    	
    	while (st[i][j])
    	    putchar(st[i][j++]);
    	    
    	puts("\"");
	}
} 

int main(void)
{
    char cs[][6] = {"Turbo", "NA","DOHC"};
	 
	put_strary2(cs, 3);
	
	return (0);
} 

示例代码9-13

/*
    对字符串的英文字符进行大小写转换 
*/

#include 
#include 

// 将字符串中的英文字符转换为大写字母
void str_toupper(char str[])
{
    unsigned i = 0;
	while (str[i]) {
		str[i] = toupper(str[i]);
		i++;
	}	
} 

// 将字符串中的英文字符转换为小写字母
void str_tolower(char str[])
{
    unsigned i = 0;
	while (str[i]) {
		str[i] = tolower(str[i]);
		i++;
	}	
}

int main(void)
{
	char str[100];
	
	printf("请输入字符串:");
	scanf("%s", str);
	
	str_toupper(str);
	printf("大写字母:%s\n", str);
	
	str_tolower(str);
	printf("小写字母:%s\n", str);
	return (0);
}


练习代码:


练习代码e9-1

/*
    保存字符串的数组(初始化) 
*/

#include 

int main(void)
{
    char str[] = "ABC\0DEF";                  //初始化    
    
    printf("字符串str为%s。\n", str);        // 显示
    
    return (0); 
}

练习代码e9-2

/*
    将str变成空字符串 
*/

#include 

int main(void)
{
    char str[] = "ABC";
    
    str[0] = '\0';
    
    printf("字符串str为%s。\n", str);
    
    system("pause");
    return (0);    
}

练习代码e9-3

/*
    编写如下函数,若字符串str中含有字符c(若含有多个,以先出现的为准),
    则返回该元素的下标值,否则返回-1 
*/

#include 

int str_char(const char str[], int c)
{
    int i = 0;
    while (str[i]) {
        if (c == str[i])
            break;
        i++;
    }
    
    if (!str[i])    i = -1;
            
    return (i);
}

int main(void)
{
    char st[10];
    char ch;
    int pos;
    
    printf("请输入字符串:");
    scanf("%s", st);
    
    getchar();        // 清除缓存 
    
    printf("\n请输入要查找的字符:");
    scanf("%c", &ch);
      
    pos = str_char(st, ch); 
    
    if (-1 == pos)
        printf("\n在字符串%s中未出现字符%c。\n", st, ch);
    else
        printf("\n在字符串%s中字符%c首次出现在第%d位。\n", st, ch, pos + 1);
        
    return (0);
}

练习代码e9-4

/*
    编写如下函数,
    返回字符串str中字符c的个数(没有则返回0) 。 
*/

#include 

int str_chnum(const char str[], int c)
{
    int num = 0;
    int len = 0;
    
    while (str[len])
        if (c == str[len++])    num++;   

    return (num);
}

int main(void)
{
    char st[10];
    char ch;
    
    printf("请输入字符串:");
    scanf("%s", st);
    
    getchar();        // 清除缓存 
    
    printf("\n请输入要查找的字符:");
    scanf("%c", &ch);
    
    printf("\n在字符串%s中字符%c出现了%d次。\n", st, ch, str_chnum(st, ch));

    return (0);
}

练习代码e9-5

/*
    依次显示字符串中的字符 
*/

#include 

// 显示字符串(不换行)
void put_string(const char str[])
{
     unsigned i = 0;
     
     while (str[i])
         printf("%c", str[i++]);
} 

int main(void)
{
    char str[100];
    
    printf("请输入字符串:");
    scanf("%s", str);
    
    put_string(str);
    putchar('\n');
    
    return (0);    
}

练习代码e9-6

/*
    编写如下函数,使字符串str显示no次。 
    void put_stringn(const char str[], int no) {}
*/

#include 

void put_stringn(const char str[], int no)
{
    while (no--)
        puts(str);     
}

int main(void)
{
    char str[100];
    int n;
    
    printf("请输入字符串:");
    scanf("%s", str);
    
    printf("请输入重复次数:");
    scanf("%d", &n);
    
    put_stringn(str, n);
    putchar('\n');
    
    return (0);    
}

练习代码e9-7

/*
    编写put_rstring函数,实现字符串的逆向输出。 
*/

#include

void  put_rstring(const char str[])
{
    int i = 0;
    
    while (str[i])
        i++;
    
    while (i + 1) {
        putchar(str[i]);
        i--;
    }      
}

int main(void)
{
    char str[100];
    
    printf("请输入字符串:");
    scanf("%s", str);
    
    printf("\n输入字符串的逆向是:");
    put_rstring(str);
    
    putchar('\n');
    
    return (0);    
}

练习代码e9-8

/*
    编写如下函数,实现字符串str的逆向保存。
    void rev_string(char str[]) {} 
*/

#include 

void rev_string(char str[])
{
    int n = 0;
    int i;
    char t;
    
    while (str[n])    n++;
    
    n--;
    
    for (i = 0; i < n / 2; i++) {
        t = str[i];     
        str[i] = str[n - i];
        str[n - i] = t;
    }
}

int main(void)
{
    char str[100];
    
    printf("请输入字符串:");
    scanf("%s", str);
    
    printf("\n字符串现在的顺序是:%s", str);
    
    rev_string(str);
     
    printf("\n字符串现在的顺序是:%s\n", str);
    
    return (0); 
}

练习代码e9-9

/*
    编写如下函数,将字符串str转换为空字符串。
	void null_string(char str[]) {} 
*/

#include 

// 将字符串str转换为空字符串
void null_string(char str[])
{
	str[0] = '\0';
}

int main(void)
{
	
	char str[100];
	
	printf("请输入字符串:");
	scanf("%s", str);
	
	printf("\n字符串是:%s\n", str);
	
	null_string(str);
		
	printf("转换为空字符串后:%s\n", str);
	
	return (0); 
}

练习代码e9-10

/*
    编写如下函数,将字符串str中的数字字符全部删除。
	void del_digit(char str[]) {} 
*/

#include 

// 将字符串str中的数字字符全部删除
void del_digit(char str[])
{
    unsigned i = 0;
    unsigned j;
    
    while (str[i])  {
    	if (str[i] >= '0' && str[i] <= '9') {
		    j = i; 
    	    while (str[j]) {
    	        str[j] = str[j + 1];
    	        j++;
			}  
			i--;   
    	} 
    	i++;
	}
} 

int main(void)
{
	char str[100];
	
	printf("请输入字符串:");
	scanf("%s", str);
	
	printf("\n字符串是:%s\n", str);
	
	del_digit(str);
		
	printf("删除数字后的字符串是:%s\n", str);
	return (0);
}

你可能感兴趣的:(C)