c字符数组

一、PTA实验作业

题目1:统计一行文本的单词个数

1. 本题PTA提交列表

2. 设计思路

定义一个长度为1000的字符数组str[1000]
在定义 i=0,cnt=0;cnt用来记录单词的个数
while  str[i]=‘\n‘既输入回车时结束字符的输入
str[i]=0;设定结束的标志
for i=0 to str[i]=‘\0‘
   if str[i]!=‘ ‘&&str[i+1]==‘ ‘;如果这个字符不为空格,并且下一个字符为空格。
         cnt++;让cnt+1;
   if str[i]!=‘  ‘&&str[i+1]==‘\0‘如果此字符为最后一个字符且不为空格结尾。
        cnt++;
输出 cnt 的值表示单词个数。

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

一开始代码是这样的,一开始没有考虑到结尾是空格的情况,以为cnt 只会记录到

倒数第一,然后让最后输出时cnt 在加上1即可。结果是错的。

发现这个问题后我多加了一个if 语句就解决末尾为空格的问题,和全部为空格的问题。

可是仍然出现了段错误和运行超时的问题。

后来我增加了数组的长度就解决了。

题目2:查验身份证

1. 本题PTA提交列表

2. 设计思路

首先定义变量 n z=0 sum =0 sum计算前17位的加权求和,z是sum %11 后的数
定义字符数组 m [12] ={"10X98765432"};和数组a [17] ={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
a数组用来表示权数。
输入n的值,     表示判断的身份证的个数。
定义 flag=2       用来判断身份证号的准确性
定义一个长度为18的字符数组     line[18]
while (n)            即当n等于0的时候结束循环
getchar ()       来存放之前输入完n之后的回车。
for i=0  to i=17
    输入line [i]的值
for i=0 to i=17
    if line[i]    不为数字,
   则,flag=0;
if (flag)         当flag 不为0 的时候
    sum=sum+(a[i]*(line[i]-‘0‘));    计算加权求和的总数sum
z=sum%11,
   if (line[17]!=m[z]),         说明校验码不正确
             flag=0;
 if (flag==0)    输出line  并让 flag=1
 在重新定义初值    sum=0;z=0;  判断下一个身份证号
 n-- 

在while 的循环外判断
  if (flag==2) 说明以上身份证都正确 ,
       则输出All passed

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

我刚开始的时候没有定义flag=2 直接让 flag=1来判断,可是在每次

判断完一个身份证后重新赋值时 会对是否输出All passed产生影响

所以就 先让flag=2 每次重新赋值时让flag=1 ;就能够解决了。

题目3:藏头诗

1. 本题PTA提交列表

2. 设计思路

###3.代码截图
![](http://images2017.cnblogs.com/blog/1233828/201712/1233828-20171210153741021-554041627.png)

###4.本题调试过程碰到问题及PTA提交列表情况说明。
本题原先是出错在,比知道两个字符表示一个汉字,
以为的是一个字符表示一个数字,结果输出的答案不对
#二、截图本周题目集的PTA最后排名
![](http://images2017.cnblogs.com/blog/1233828/201712/1233828-20171210154047661-1405305900.png)

#三、同学代码结对互评
##1.互评同学名称
郑佳亮
##2.我的代码、互评同学代码截图
我的代码 :
![](http://images2017.cnblogs.com/blog/1233828/201712/1233828-20171210172712943-923243078.png)

郑佳亮的代码:
![](http://images2017.cnblogs.com/blog/1233828/201712/1233828-20171210172928943-379826779.png)

##3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题
我的代码虽然更长两行,但是我觉得我的想法会更好,我只用两个判断,就能够满足他四个判断的效果,所以我觉得我的代码会更好一些哦
#四、本周学习总结
##1.你学会了什么?
###1.1指针变量如何定义
- (1) 定义指针变量的一般形式为  类型名  *指针变量名
###1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?
在明确定义指针指向确切的某个地址时 ,指针相加才有意义
###1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
答:若是不赋初值给指针,指针会随机指向一个地址,这样对程序会有危害,导致系统崩溃,停止运行。
![](http://images2017.cnblogs.com/blog/1233828/201712/1233828-20171210160027365-565938257.png)

###1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
![](http://images2017.cnblogs.com/blog/1233828/201712/1233828-20171210161729833-1494015546.png)

![](http://images2017.cnblogs.com/blog/1233828/201712/1233828-20171210161754255-484302687.png)

void slipfloat(float x,int *intpart,float *fracpart)这句是指针变量作为形参,在主调函数中,将该变量的地址或者该变量的指针作实参,在被调函数中,用指针类型形参
接受该变量的地址,并改变形参所指向变量的值。
###1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下
###1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
p= a;
或者 p= &a[0];  表示数组元素:p=a+1   或者 p=&a[1].
###1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
char *p
char line[80]
p = line;   其初始位置在基地址处
###1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?

include

void link(char p1,char p2);

int main ()

{

char line[160]={0},str[80];

char p1=line,p2=str;

int i=0;

while ((line[i]=getchar ())!=‘\n‘){

i++;

}

line[i]=0;

//getchar ();

i=0;

while ((str[i]=getchar ())!=‘\n‘){

i++;

}

str[i]=‘\0‘;

link(p1,p2);

puts(line);

return 0;

}

void link(char p1,char p2)

{

int i=0,j=0,index=160;

for(i=0;i<160;i++){

if((p1+i)==‘\0‘){

index=i;

}

if(i>=index){

(p1+i)=*(p2+j);

j++;

}

}

}

说实话,我也不知道好处是什么,比较灵活吧
#2.本周你不会内容有什么?
###2.1 课堂派错题罗列及如何订正。
- (1)以下选项中,对基本类型相同的指针变量不能进行运算的运算符是()。不会可以用DEVC去实践验证.
进过老师讲解直到指针只能进行减法运算,不能进行加减乘除。
- (2) 若有语句:int *point,a=4; 和 point=&a; 下面均代表地址的一组选项是
C、*&point,*point,&a  我一开始是选择这个,刚开始没掌握嘛现在直到前两个都不是表示地址。
###2.2 其他不会的?打算怎么解决
对于指针的运用还是不太熟悉,尤其是指针数组的运用。
##3.数组上机考试小结
###3.1 那题错了,请罗列?
6-2 jmu-c-二维数组转置并按列排序
7-2 jmu-c-十进制转16进制
7-3 jmu-c-输出字符间的字符子串
7-4 数组元素的删除(15 分)
以上的题目错了
###3.2 错题如何订正,为什么错了?
6-2 jmu-c-二维数组转置并按列排序,这题在装置的地方对于j 的范围没定义好,结果有重新装置回去了
    for(j=0;j<n;j++){
        if(i<j){
            t=a[i][j];
            a[i][j]=a[j][i];
            a[j][i]=t

```

我就在下面转换前加了一个条件,即可

7-2 jmu-c-十进制转16进制 这题还是不懂怎么做,还没想出来,不过我到时有一个取巧的办法,用%x输出

7-3 jmu-c-输出字符间的字符子串 忘记了当时那里卡住了,反正现在是做出来了

时间: 2025-01-12 04:27:52

c字符数组的相关文章

C++中字符数组和字符串string

字符数组 C++中字符数组用char str[]可以用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,因为系统会自动补上一个'\0'作为字符串的结束标志.当然对于未初始化的也补'\0'. #include <iostream> #include <string> using namespace std; int main() { char str[11] = "I am happy"; // 系统会自动补上'\0'空

对比c++中的string与c中的字符数组的构造和初始化

string类的构造函数: string(const char *s);    //用c字符串s初始化string(int n,char c);     //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1:string s2="hello":都是正确的写法.当构造的string太长而无法表达时会抛出length_error异常 : 关于c中的字符数组: 请参考: http://blog.csdn.net/wangrunmin/article

实验九:二维数组和字符数组的应用

知识点: 二维数组的定义及引用:1.二维数组的定义: 二维数组的定义形式:类型名   数组名[行长度][列长度]:例如:        int  a[3][2]:        定义1个二维数组a,3行2列,6个元素: int   b[5][10]:        定义1个二维数组a,5行10列,50个元素: 二维数组的引用:行下标的范围:0~行长度-1:                        列下表的范围:0~列长度-1: 字符串的存储和运算可以用一维字符数组实现: 一维字符数组的定义

倒置字符数组中的字符

问题:如何把字符串 "We are the world" 转成 "world the are we" ?如果最多只能用两个额外的变量又该如何实现这样的转换? 分析:1.把字符串转成字符数组,然后对字符数组进行操作. 2.选择倒置字符数组的方法:用一个临时变量temp来交换两个字符,然后依次移动数组中的其他元素:利用 A=A+B, B=A-B, A=A-B 方式来交换两个字符. 3.根据数组中首尾字符的位置来倒置它们之间的字符. 4.优化方法:减少循环的次数,减少变量

字符指针与字符数组

学了挺久的c语言,c语言有意思的就有指针这一大块,另外就是字符串,字符指针与字符数组的区别对于初学者应该是比较难以区分的,讲讲自己的看法. 1.定义上的区别 字符数组具有固定的地址,且字符数组的名字不能更改或运算. 字符指针是一个变量,用来存储首字符的地址,且指向的字符串通常为一个常量. char str[] = "helloworld"; str[4] = 'X'; printf("%s",str); 输出结果:hellXworld char *str = &qu

字符串指针(char*)和字符数组(char [])区别

原文:http://www.blogbus.com/kavine-logs/29243638.html 今天在编写几个小函数的时候,半天调不通,长久不使用C++知识都快忘光了,赶紧拣些起来应付即将到来的应聘. void main(){    char* pStr1 = "Hello!";    char pStr2[] = "Hello!";    change(pStr1);    change(pStr2);}void change(char* pInstr){

字符串和字符数组

  1.字符串 严格意义上来说,C语言并没有字符串原生的字符串的类型,而是通过字符指针来实现的:char *p = "LINUX";.而对于其他的高级语言来说,比如C++的就存在字符串类型: string p1 = "I LOVE LINUX"; . 字符串在内存中其实就多个字节组成的,且地址都是连续的:指针指向字符串的的头部:字符串的结尾是以"\0"(是真能整的零)作为字符串结束的标志. "\0" 的理解: \0 是一个 A

c语言字符数组的初始化问题

1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花括号中提供的字符个数大于数组长度,则按语法错误处理: 若小于数组 长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串 在c 语言中,将字符串作为字符数组来处理.(c++中

C语言——字符数组

在C语言编程中,我们一般用一个字符数组来存放一个字符串.例如,我们想存储这个字符串“http://i.cnblogs.com”,这个字符串一共有20个字符,要存放下这个字符串,我们需要一个长度为21的字符数组.为什么是21个而不是20个呢?在C语言中,字符串数组默认以'\0'结尾,所以我们一共需要一个长度为21的字符数组来存储这个变量. unsigned char text[21] = “http://i.cnblogs.com”; 既然我们已经知道了如何存放一个字符串,那下面我们来讨论另外几个

字符数组的定义与使用详细解析

1. 字符数组的定义: 用来存放字符量的数组称为字符数组. 形式数值数组相同.例如: char c[10]; 由于字符型和整型通用,也可以定义为int c[10],但这时每个数组元素占2个字节的内存单元. 字符数组也可以是二维或多维数组.例如: char c[5][10]; 即为二维字符数组. 2. 字符数组的初始化 第一种方法是分别对每一个元素进行赋值操作: 字符数组也允许在定义时作初始化赋值.例如: char c[10]={'c', '  ', 'p', 'r','o', 'g', 'r',