第九章 字符串的基本知识
9-1 什么是字符串
9-2 字符串数组
9-3 字符串处理
代码清单 9-1
//显示字符串字面量的长度
#include<stdio.h>
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<stdio.h>
int main(voud)
{
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<stdio.h>
int main(void)
{
char str[] = "ABC";
printf("字符串str为%s。\n",str);
return (0);
}
代码清单 9-4
//询问名字并显示问候语(读取字符串)
#include<stdio.h>
int main(void)
{
char name[40];
printf("请输入您的名字:");
scanf("%s",&name);
printf("您好,%s 先生/女士!!\n",name);
return (0);
}
代码清单 9-5
//格式化字符串“12345”并显示
#include<stdio.h>
int main(void)
{
char str[] = "12345";
printf("%s\n", str); //原样输出
printf("%3s\n", str); //至少显示3位
printf("%.3s\n", str); //最多显示位
printf("%8s\n", str); //右对齐
printf("%-8s\n", str); //左对齐
return (0);
}
代码清单 9-6
//字符串数组
#include<stdio.h>
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<stdio.h>
int main(void)
{
int i;
int cs[3][128];
for (i = 0; i < 3; i++){
printf("cs[%d]:",i);
scanf("%s",&cs[i]);//cs[0]、cs[1]、cs[2]都是字符串(字符串数组);传入scanf函数时可以不带&符号
}
for (i = 0; i < 3; i++)
printf("cs[%d] = \"%s\"\n", i, cs[i]);
return (0);
}
代码清单 9-8
//判断字符串的长度
#include<stdio.h>
//返回字符串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<stdio.h>
//显示字符串的字符(不换行)
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<stdio.h>
//将字符串str中的数字字符保存至数组cnt
void str_dcount(const char str[], int cnt[])
{
unsigned i = 0;
while(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<stdio.h>
//显示字符串数组
void put_strary(const char str[][6], int n)
{
int i;
for (i = 0; i < n; i++)
printf("str[%d] = \"%s\"\n", i , str[i]);
}
int main(void)
{
char cs[][6] = {"Turbo","NA", "DOHC"};
put_strary(cs, 3);
return (0);
}
代码清单 9-12
//显示字符串数组
#include <stdio.h>
//显示字符串数组(逐个显示字符)
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<ctype.h>
#include<stdio.h>
//将字符串的英文字母转换为大写字母
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);
}
练习代码 9-1
//练习9-1
#include<stdio.h>
int main(void)
{
char str[] = "ABC\0DEF";
printf("字符串str为%s。\n",str);
return (0);
}
练习代码 9-2
//练习9-2
#include<stdio.h>
int main(void)
{
char str[] = "ABC";
str[0] = '\0';
printf("初始化赋值的字符串为%s",str);
return (0);
}
练习代码 9-3
//练习9-3编写如下函数,若字符串str中含有字符c(若含有多个,以先出现的为准),则返回该元素的下标值,否则返回
#include<stdio.h>
int str_char(const char str[], int c)
{
int len = 0;
while (str[len]){
if (str[len] == 'c')
return (len);
len++;
}
return (-1);
}
int main(void)
{
char c;
char st[100];
printf("请输入字符串:");
scanf("%s", &st);
printf("字符c在字符串%s中的下标为:%d",st, str_char(st, c));
return (0);
}
练习代码 9-4
//练习9-4
/*编写如下函数,返回字符串str中字符dc的个数(没有则返回0)
int str_chnum(const char str[],int c*/
#include<stdio.h>
int str_chnum(const char str[],int c)
{
int len = 0;
int i = 0;
while (str[len]){
if (str[len] == 'c')
i++;
len++;
}
return (i);
}
int main(void)
{
char c = 'c';
char st[100];
printf("请输入字符串:");
scanf("%s",&st);
printf("字符串%s中含有的%c的个数为:%d",st, c, str_chnum(st, c));
return (0);
}
练习代码 9-5
//练习9-5
#include<stdio.h>
//显示字符串不换行
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);
}
练习代码 9-6
//练习9-6
#include<stdio.h>
//编写如下函数,使字符str显示no次
void put_string(const char str[], int no)
{
unsigned i = 0;
while (no--)
puts(str);
}
int main(void)
{
char str[100];
int no;
printf("请输入字符串:");
scanf("%s",str);
printf("请输入你要显示的次数:");
scanf("%d",&no);
put_string(str, no);
putchar('\n');
return (0);
}
练习代码 9-7
#include<stdio.h>
//逆向显示字符串
void put_string(const char str[])
{
unsigned 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_string(str);
putchar('\n');
return (0);
}
练习代码 9-8
//练习9-8
//编写函数实现字符串的逆向保存
#include<stdio.h>
void rev_stringn(char str[])
{
int n = 0;
int i;
char t;
while (str[n]) n++;
if (n % 2 == 0) ;
else
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_stringn(str);
printf("\n字符串现在的顺序是:%s\n", str);
return (0);
}
练习代码 9-9
//练习9-9
//编写函数,将字符串str转换为空字符串
#include<stdio.h>
void null_string(char str[])
{
unsigned i = 0;
while(str[i])
str[i] = '\0';
i++;
}
int main(void)
{
char str[100];
printf("请输入字符串:");
scanf("%s",str);
null_string(str);
printf("变换为的字符是:%s\n",str);
return (0);
}
练习代码 9-10
//练习9-10
//编写函数将字符串中的str中的数字字符全部删除
#include<stdio.h>
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++;
}
return (str);
}
int main(void)
{
char str[100];
printf("请输入字符串:");
scanf("%s",str);
del_digit(str);
printf("删除数字后的字符串是:%s\n", str);
return (0);
}
本文深入浅出地介绍了C语言中的字符串概念,包括字符串数组和处理方法。通过9个代码清单和10个练习代码,帮助读者掌握字符串的基本操作和实践应用。

788

被折叠的 条评论
为什么被折叠?



