第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);
}