续3.字符串和字符串函数
用C设计并测试一个函数,从输入中获取n个
字符(包括空白、制表符、换行符),把结
果存储在一个数组里,它的地址被传递作为
一个参数。
功能1:从输入中获取n个字符(包括空白、制表符、换行符),并将结果存储到用户提供的数组中。
#include <stdio.h>
/**
* 从输入中获取n个字符(包括空白、制表符、换行符)
* 并存储到用户提供的数组中。
*
* @param buffer 用户提供的存储字符的数组
* @param n 要读取的字符数量
* @return 成功时返回读取的字符数,失败时返回-1
*/
int get_n_chars(char *buffer, int n) {
if (buffer == NULL || n <= 0) {
return -1; // 参数无效
}
int count = 0;
while (count < n) {
int c = getchar(); // 读取一个字符
if (c == EOF) {
break; // 遇到文件结束符,退出循环
}
buffer[count++] = (char)c;
}
buffer[count] = '\0'; // 添加字符串结束符
return count;
}
int main() {
char buffer[100]; // 假设最多读取99个字符
int n = 50; // 假设读取50个字符
int chars_read = get_n_chars(buffer, n);
if (chars_read == -1) {
printf("读取失败!\n");
} else {
printf("读取了 %d 个字符:\n", chars_read);
printf("内容: %s\n", buffer);
}
return 0;
}
功能2:在读取n个字符或遇到第一个空白、制表符或换行符时停止,取先到者。
#include <stdio.h>
#include <ctype.h> // 用于isspace()
/**
* 从输入中获取最多n个字符,但在遇到第一个空白、制表符或换行符时停止。
*
* @param buffer 用户提供的存储字符的数组
* @param n 要读取的最大字符数量
* @return 成功时返回读取的字符数,失败时返回-1
*/
int get_n_chars_until_whitespace(char *buffer, int n) {
if (buffer == NULL || n <= 0) {
return -1; // 参数无效
}
int count = 0;
while (count < n) {
int c = getchar(); // 读取一个字符
if (c == EOF) {
break; // 遇到文件结束符,退出循环
}
if (isspace(c)) {
// 检查是否是空白字符
break; // 遇到空白字符,停止读取
}
buffer[count++] = (char)c;
}
buffer[count] = '\0'; // 添加字符串结束符
return count;
}
int main() {
char buffer[100]; // 假设最多读取99个字符
int n = 50; // 假设读取最多50个字符
int chars_read = get_n_chars_until_whitespace(buffer, n);
if (chars_read == -1) {
printf("读取失败!\n");
} else {
printf("读取了 %d 个字符:\n", chars_read);
printf("内容: %s\n", buffer);
}
return 0;
}
4.结构和其他数据形式
设计一个结构模板存储一个月份名、该
月份名的3个字母缩写、该月的天数以及月
份号。
#include <stdio.h>
// 定义结构体模板
struct MonthInfo {
char name[20]; // 月份名
char abbreviation[4]; // 月份的3个字母缩写
int days; // 该月的天数
int number; // 月份号 (1-12)
};
int main() {
// 初始化结构体数组,存储12个月的信息
struct MonthInfo months[] = {
{
"January", "Jan", 31, 1},
{
"February", "Feb", 28, 2},
{
"March", "Mar", 31, 3},
{
"April", "Apr", 30, 4},
{
"May", "May", 31, 5},
{
"June", "Jun", 30, 6},
{
"July", "Jul", 31, 7},
{
"August", "Aug", 31, 8},
{
"September", "Sep", 30, 9},
{
"October", "Oct", 31, 10},
{
"November", "Nov", 30, 11},
{
"December", "Dec", 31, 12}
};
// 输出所有月份的信息
printf("月份信息:\n");
printf("%-15s %-10s %-5s %-10s\n", "月份名", "缩写", "天数", "月份号");
for (int i &