C/C++归纳2

发布于:2025-04-03 ⋅ 阅读:(19) ⋅ 点赞:(0)

续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 &

网站公告

今日签到

点亮在社区的每一天
去签到