ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言中借助char数组对字符串的简易操作

C语言中借助char数组对字符串的简易操作 概述本文以字符反转字符统计大小写转换为例借助char数组对字符类型数据进行处理手把手教授有关技巧。核心概念char类型数据用来表示单个字符但它的本质是小整数类型。ASC码是一种字符编码标准规定了用哪些数字来表示英文字母、数字、标点符号和控制字符。标准库函数toupper基本用法它接受一个 int 类型的参数如果该参数代表一个小写字母就返回其对应的大写字母否则原样返回该参数限制只接受unsigned char类型数据或等于EOF标准库定义的宏意为文件结束大小写转换由于C语言中没有string类型数据Java中存在。那么我们通常将英文字符转换为ASC码来对字符进行处理。如小写a的ASC码为97而大写a的ASC码为65。在ASC编码表中字母的小写与大写恒存在一个32的差值。那么我们就可以用这个特点进行最简单的大小写转换的编写代码示例# include stdio.h # include string.h int main() { printf(输入个数字表示你接下来要输入的字符串长度); int a 0; scanf(%d, a);//输入的字符长度会赋给数组让数组准确保存字符 char arr[a 1];//设立数组保存数据 scanf(%s, arr);//输入字符 int c 0; for (int i 0; i a; i) { c arr[i] - 32; arr[i] c; }//用遍历数组的方式将数组中的小写转换为大写 printf(%s, arr); return 0; }而上面的方法只能做到将全为小写字母的字符串转换为大写字母不具备分辨能力。这时我们需要引用一个标准库函数来实现对大小的分辨toupper。代码示例# include stdio.h # include ctype.h int main() { char arr[1000];//设立char数组保存数据 scanf(%s, arr);//输入数据 for (int i 0; arr[i] ! \0; i) { arr[i] (char)toupper((unsigned char)arr[i]); }//将小写字母转化为大写 printf(%s, arr); return 0; }字符统计其实现的基本思路是先用char数组储存字符串再另一个int数组来统计字符。将char数组内的字符对应的ASC码作为int数组的下标来实现统计代码示例# include stdio.h int main() { char arr[1024]; int f[256] {0}; scanf(%1023s, arr);//字符串输入 for (int i 0; arr[i] ! \0; i) {//中间的判断含义为遍历char数组当char数组中某一项等于空字符时循环终止 f[(unsigned char)arr[i]];//第i项的字母的ASC码等于int数组内这一项ASC码作为下标。并使其1 } for (int i 0; i 256; i) { if (f[i] 0) { printf(%c %d\n, i, f[i]); }//输出全部字符的统计数据 } return 0; }要注意的是该方法只能统计由符号数字英文字母组成的字符串。而汉字组成的字符串无法用char数组保存。因为char数组每个元素只能保存单字节的信息而汉字是多字节信息编码。所以在无法保存的基础上统计便无从说起。要对汉字进行统计则要使用UTF-8 字符统计。字符反转字符反转的基础版便是将char数组中存储的数据进行交换。代码示例# include stdio.h int main() { char arr[1000] {0}; scanf(%999s, arr); int c 0;//int数据保存字符串长度 for (int i 0; i 1000; i) { if (arr[i] ! 0) { c; }//这个for循环用遍历数组统计输入的字符串长度 } for (int i 0; i c / 2; i) { int b arr[c - 1 - i]; arr[c - 1 - i] arr[i]; arr[i] b; }//交换字符。但需注意用函数输入的字符串末尾会有一个占位符\0表示字符串结束因此交换时需要先-1 printf(%s \n, arr); return 0; }进阶方式便是用双指针原地交换法也是效率最高的方式由于本文仅涉及借助char数组对字符串类数据的操作不涉及指针因此暂且不论。
返回列表