《明解C語言》示例程式碼和練習程式碼[第9章]
阿新 • • 發佈:2019-01-31
第9章 字串的基本認識
示例程式碼:
示例程式碼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(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 <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); // 最多顯示3位 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;
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 <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]) {
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 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 <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);
}
練習程式碼:
練習程式碼e9-1
/*
儲存字串的陣列(初始化)
*/
#include <stdio.h>
int main(void)
{
char str[] = "ABC\0DEF"; //初始化
printf("字串str為%s。\n", str); // 顯示
return (0);
}
練習程式碼e9-2
/*
將str變成空字串
*/
#include <stdio.h>
int main(void)
{
char str[] = "ABC";
str[0] = '\0';
printf("字串str為%s。\n", str);
system("pause");
return (0);
}
練習程式碼e9-3
/*
編寫如下函式,若字串str中含有字元c(若含有多個,以先出現的為準),
則返回該元素的下標值,否則返回-1
*/
#include <stdio.h>
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 <stdio.h>
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 <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);
}
練習程式碼e9-6
/*
編寫如下函式,使字串str顯示no次。
void put_stringn(const char str[], int no) {}
*/
#include <stdio.h>
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<stdio.h>
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 <stdio.h>
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 <stdio.h>
// 將字串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 <stdio.h>
// 將字串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);
}