gpt4 book ai didi

c - 我如何使用指针在该数组(函数)内部移动而不是数组订阅

转载 作者:行者123 更新时间:2023-11-30 14:49:01 25 4
gpt4 key购买 nike

我的问题是生成首字母缩略词函数,如何使该函数以指针算​​术方式而不是数组下标方式工作。在不搞乱结构本身的情况下,教授禁止数组订阅,所以我必须用指针算术来代替,任何人都可以帮忙吗?

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#define B 2
#define N 8
typedef struct {

int course_id;
int course_quota;
char course_name[50];
char course_code[6];
char course_acronym[N];
}course_t;

void generate_course_code(char *course_code, int course_id);
void generate_course_acronym(char *, char *);
void display();
course_t courses[B];
int main() {
int i;
for(i = 0; i < B; i++) {
printf("Enter the course name: ");

fgets(courses[i].course_name, sizeof(courses[i].course_name), stdin);
generate_course_acronym(courses[i].course_name, courses[i].course_acronym);


printf("Enter the course Quota: ");
scanf("%d", &courses[i].course_quota);

while ('\n' != getchar())
{

}
courses[i].course_id = i;
generate_course_code(courses[i].course_code, courses[i].course_id);


}
display();


return 0;
}

void generate_course_code(char *course_code, int course_id) {
char str[6];
course_id++;
strcpy(course_code, "CSE");
if (course_id < 10) {

sprintf(str, "0%d", course_id);
}
else
sprintf(str, "%d", course_id);
strcat(course_code, str);

}



void generate_course_acronym(char *course_name, char *course_acronym) {

int j = 0;
char *p = course_name;
for (course_acronym[j++] = toupper(*p); *p != '\0'; p++)
if (*p == ' ') course_acronym[j++] = toupper(*(++p));
course_acronym[j] = '\0';

}


void display() {
int x;

for (x = 0; x < B; x++) {
printf("%d. %s - %s (%s) - %d \n", ++courses[x].course_id, courses[x].course_code, courses[x].course_name, courses[x].course_acronym, courses[x].course_quota);


}

}

最佳答案

由于函数参数以指针形式提供,因此可以按原样使用它们来使用指针算术实现您的目标,如下所示:
(评论中的解释)。

void generate_course_acronym(char *course_name, char *course_acronym) 
{
*course_acronym = (char)toupper(*course_name); //initialize acronym to capitalized form of first character
while(*course_name) //test for end of string (NULL)
{
if(*course_name == ' ') // detect spaces between strings
{
course_acronym++; // advance acronym pointer
course_name++; // advance source pointer beyond space.
*course_acronym = (char)toupper(*course_name); // assign next acronym character
}
course_name++; // advance source to next address location
}
course_acronym++; // advance pointer to one location beyond end of acronym
*course_acronym = '\0'; // NULL terminate, making acronym a new string
}

注意:调用函数必须在 course_acronym 中传递足够的空间,以便为 course_name 中的每个单词容纳 1 个字节,+ 1 个额外字节。例如,如果 course_name 定义为:

char course_name[]={"This is a fine programming class"};

那么 course_acronym 必须定义至少 7 个字节的空间。 (NULL 终止的字数 + 1)

关于c - 我如何使用指针在该数组(函数)内部移动而不是数组订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50078562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com