字符及字符串类型编程学习(1)

有关字符的编程问题,首先必须掌握一些基本字符的ASCII码值。
1>空格 32
2>数字0~9 48 ~ 57
3>大写字母A~Z 65 ~ 90
4>小写字母a~z 97 ~ 122 (其中 小写a 与 大写A 的差值为32)
5>水平制表符 9
6>换行符 10
字符编程中常见的一些函数及功能。
1,getchar() 作用:从stdio流中读字符。
语法形式:getchar() (无参数)。

2,gets() 作用:用于输入字符串。
语法形式:gets(字符数组名或指针)。

3,scanf() 作用:用于输入字符串。
语法形式:scanf(“格式控制字符串”,变量地址列表);
通俗方式:scanf("%s",字符数组名或指针);
gets()较scanf,gets()接受空格,制表符Tab,回车等,而scanf不接受。至于他们区别的详细介绍[载自 博客园 wanghetao(https://www.cnblogs.com/wanghetao/archive/2011/11/01/2232234.html)

4,strlen() 作用:计算字符串的长度,不包括’\0‘在内。
头文件:string.h
语法格式:strlen (字符数组名)
strlen()与sizeof()的区别详细介绍[CSDN 荪荪(https://blog.csdn.net/smf0504/article/details/51372351)

5,strcpy() 作用:实现字符串的拷贝。
头文件:string.h
语法格式:strcpy(char *dest,const char *src) dest为目标串的起始地址 src为源串的起始地址。
返回值:目标串的起始地址

6, * strcat() 作用:实现字符串的连接。
头文件:string.h
语法格式:char *strcpy(char *dest,const char *src) dest为目标串的起始地址 src为源串的起始地址。
把字符串src连接到字符串dest的后边。
返回值:目标串的起始地址

7,strcmp 作用:按照ASCII码值实现字符串大小的比较。
头文件:string.h
语法格式:int strcmp(const char *s1,const char *s2) s1与s2为字符串的起始地址。
返回值:
字符串1=字符串2,返回值为0;
字符串1>字符串2,返回值大于0;
字符串1<字符串2,返回值小于0;

1,假设字符数组存有三行数组,且可以任意设定数组的内容。统计出数组中所有的字符’f’,以及每行的字符f的个数。(类似可求出没行的空格,大小写个数,等各种问题)。
个人初次编程代码如下:(方法一)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char a[3][100]={“resfsefddefwes”,“dugwfkagfwuekrgfweu”,“wekgfiwgfwouefiwegfkwe”};
int first=0,second=0,third=0,sum=0;
int i;
int s=0;
char *p[3];
for(i=0;i<3;i++){
p[i]=a[i];
}
int m;
for(m=0;m<3;m++){
int s;
for(s=0;s<sizeof(a[m])/sizeof(char);s++){ //求出数组的所有f的个数
if( * (p[m]+s)==102){
sum++;
}
}
}
for(s=0;s<sizeof(a[0])/sizeof(char);s++) //第一行f的个数
if( * (p[0]+s)==102){
first++;
}
for(s=0;s<sizeof(a[1])/sizeof(char);s++) //第二行f的个数
if( * (p[1]+s)==102){
second++;
}
for(s=0;s<sizeof(a[2])/sizeof(char);s++) //第三行f的个数
if( * (p[2]+s)==102){
third++;
}
printf(“数组字符f的个数:%d \n”,sum);
printf(“第一行字符f的个数:%d \n”,first);
printf(“第二行字符f的个数:%d \n”,second);
printf(“第三行字符f的个数:%d \n”,third);

return 0;
}
运行结果如上
感受:初次编码在嵌套for循环中用条件判断语句,发现每次第一行查找三次,第二行查找三次,导致结果错误。逻辑上不够严密。最后分开写正确。
较简单写法代码如下:(方法二)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char a[3][88];
int i=0;
for(i=0;i<3;i++){
printf(“请输入第 %d行数据:”,i+1);
scanf("%s",a[i]);
}
int m,n;
char *p[3];
int qq;
int sum=0;

for(qq=0;qq<3;qq++){ //指针数组每个指针变量指向三维数组的每一行 起始位置
p[qq]=a[qq];
}

for(m=0;m<3;m++){
for(n=0;n<strlen(a[m]);n++){ //遍历数组一行的每一个字符
if(*(p[m]+n)==‘f’){
sum++;
}
}
printf(“第 %d 行’j’的个数是:%d\n”,m+1,sum);
sum=0; //将sum清0,方便下次运用。
}
return 0;
}
运行结果如上
开心 开心!

猜你喜欢

转载自blog.csdn.net/qq_36942291/article/details/86605537