如何在字符数组中存储空白字符

        C没有为字符串定义专门的数据类型,而是把它存储在字符数组中,虽然这种方法可以有效地解决字符串存储问题,但当使用scanf函数为字符数组赋值时,含有空白符(空格、制表符、换行符)的字符串却无法完整储存。如:

#include<stdio.h>

int main(void)

{

char str[256];

scanf("%s",str);

printf("%s\n",str);

 

return 0;

}

         当用户输入不含空白符的字符串时,字符串能正常输出,比如Hello; 但当用户输入的是含有空白符的字符串时,只能输出空白符前的字符串,比如Hello world!,只能输出Hello.

那么应当如何存储含有空格符的字符串(在控制台中)呢?

下面提供两种解决方法:

1. 用gets函数实现:

功能: 从流中取一字符串
用法: char *gets(char *string);
程序例:

#include <stdio.h>

int main(void)

{

  char str[256];

  gets(str);

 printf("%s\n",str);

 

  return 0;

}

运行结果:

Hello world!

Hello world!

Press any key to continue

 

2.用getchar函数实现

功 能: 从stdin流中读字符
用法: int getchar(void);
程序例1:

#include<stdio.h>

int main(void)

{

  char str[256];

  int i=0;

 

  str[0] = getchar();

  while (str[i++]!='\n')

  {

       str[i] = getchar();  

  }

  str[i-1]='\0';

  printf("%s\n",str);

 

  return 0;

}

运行结果:

Hello world!

Hello world!

Press any key tocontinue

程序例2:

如果想存储换行符,则可用如下方法:

#include<stdio.h>

int main(void)

{

      char ch,str[256];

      int i=0;

     

  while((ch = getchar())!=EOF)//EOF是文件结尾标记,MS-DOS下可用ctrl+z来标志文件结尾

      {

           str[i++]=ch;

      }

      str[i]='\0';

 

      printf("%s",str);

 

      return 0;

}

运行结果:

Hello world!

How are you?

I'am OK

^Z

Hello world!

How are you?

I'am OK

Press any key tocontinue

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、填空题(每空1分,共20分) 1. 不包含任何字符(长度为0)的串 称为空串; 由一个或多个空格(仅由空格符)组成的串 称为空白串。 (对应严题集4.1①,简答题:简述空串和空格串的区别) 2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为 3 。 4. 子串的定位运算称为串的模式匹配; 被匹配的主串 称为目标串, 子串 称为模式。 5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。 6. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m 。 7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288 B ;末尾元素A57的第一个字节地址为 1282 ;若按行存储时,元素A14的第一个字节地址为 (8+4)×6+1000=1192 ;若按列存储时,元素A47的第一个字节地址为 (6×7+4)×6+1000)=1276 。 8. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 9188 。 答:考虑0行0列,(58列×61行+32行)×2字节+基址2048=9188?? 9. 三元素组表的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的 行下标 、 列下标 和 元素值 。 10.求下列广义表操作的结果: (1) GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号 (2) GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ; …………………………

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值