关于C++,基础的概念便可不在叙述,这篇文章主要围绕于 C++中字符串相关内容 和 格式化输入\输出 ,那么,将离不开包含在头文件 stdio.h 中的 printf() 函数和 scanf() 函数。如果能够利用好这两个函数,那么不仅能与用户交互,还可根据个人喜好和任务要求格式化输出。
首先,我们先来了解字符串。
1.1 字符串
字符串(character string)是一或多个字符的序列,例如 "Welcome to Shaanxi!" ,它用双引号括起来,双引号的作用则是告知编译器它括起来的是字符串。关于字符串的储存,我将用一幅图来表示:
W | e | l | c | o | m | e | t | o | S | h | a | a | n | x | i | ! | \0 |
C语言中字符串都是被储存在char类型的数组中,如上图所示,字符串中的每一个字符被储存在相邻的储存单元中,包括空字符 '\0' ,它用来标记字符串的结束。接下来,我们将通过一个简单的例子(程序1.1)来使用字符串,我使用的编译器是MSVS2022。
#include
#include
int main(void)
{
char name[40];
printf("你的名字是:");
scanf("%s", name);
printf("你好,%s.今天的你又比昨天更加努力了噢!\n", name);
printf("你的名字占用%zd个字节", strlen(name));
return 0;
}
输入zhangsan,打印出来结果是:
这段代码中,输入的名字zhangsan以 %s 的形式打印出来,它在储存中占用9个字节,因为空字符'\0'的存在。
1.2 strlen()函数与sizeof运算符的区别
在程序1.1中,我们使用了包含在头文件string.h中的strlen()函数。由于sizeof以字节为单位给出对象的大小,而strlen()函数给出字符串中的字符长度(一个字符储存在一个字节中),那么,将这两种方法同时应用于字符串能否得到相同结果呢?答案显然是否定的。我将通过下面一个例子(程序1.2)来说明:
#include
#include
#define SENTENCE "Welcome to Shaanxi!"
int main(void)
{
char name[40];
printf("尊敬的旅客,请输入您的名字:");
scanf("%s", name);
printf("请稍等,正在查询信息中……\n");
Sleep(5000);//Sleep()函数,程序将延时5s打印下一项
printf("%s,欢迎来到陕西!(%s)\n", name, SENTENCE);
printf("\n\"用sizeof运算符得出名字占用 %zd 个字节,", sizeof(name));
printf("而strlen()函数得出名字占用 %zd 个字节。\"\n", strlen(name));
printf("\"用sizeof运算符得出SENTENCE占用 %zd 个字节,", sizeof(SENTENCE));
printf("而strlen()函数得出SENTENCE占用 %zd 个字节。\"\n", strlen(SENTENCE));
return 0;
}
代码中 Sleep() 函数用于延时打印下一项printf,其中5000单位为毫秒。运行代码,根据提示输入名字:Zhangsan,得到如下结果: