gpt4 book ai didi

c - 如何使用struct将Pascal风格的字符串转换为C类型

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

我必须将 Pascal 风格字符串定义为结构,并定义一个 C 字符串,然后编写一个函数将 C 字符串 "Mississippi" 转换为帕斯卡风格的字符串。 Pascal 风格字符串具有包含字符数的成员变量 int 和结尾不带有 '\0' 的字符串的 char 变量。

我的问题出在 for 循环函数中。如何将 C 字符串中的字符放入新定义的 Pascal 样式字符串中?

我不允许使用string.h头文件。

#include <stdio.h>
#include <stdlib.h>

typedef struct PascalString {
int size;
char *string;
} PString;

struct PascalString *newPascalString(char *stringC) {
int i;
PString *pascal_string = malloc(sizeof(struct PascalString));
pascal_string->size = 11;
pascal_string->string = malloc(sizeof(char) * pascal_string->size);

for(i = 0; i < pascal_string->size; i++) {
pascal_string[i] = stringC[i]; // here is my problem
}
return pascal_string;
}

int main()
{
char *c_string = "Mississippi";
newPascalString(c_string);
return 0;
}

最佳答案

只需更改此

for(i = 0; i < pascal_string->size; i++)

for(i = 0; (i < 11) && (stringC[i] != 0) ; i++)

由于 C 字符串以 '\0' 终止,因此您必须循环直到找到终止 '\0' 或空间不足。

您还可以像这样计算字符串的长度

for (i = 0 ; stringC[i] != '\0' ; ++i)
pascal_string->size++;

然后保持循环原样

for(i = 0; i < pascal_string->size; i++)

您的代码还有另一个问题,这是磨损的

pascal_string[i] = stringC[i];

您应该将字符存储在 string 成员中,如下所示

pascal_string->string[i] = stringC[i];

显然你需要这个

#include <stdio.h>
#include <stdlib.h>

typedef struct PascalString {
int size;
char *string;
} PString;

PString *newPascalString(char *stringC) {
int i;

PString *pascal_string = malloc(sizeof(struct PascalString));
if (pascal_string == NULL) /* always check the return value of malloc */
return NULL;

pascal_string->size = 0;
for (i = 0; stringC[i] != '\0'; ++i)
++pascal_string->size;

pascal_string->string = malloc(pascal_string->size);
if (pascal_string->string == NULL) {
free(pascal_string);
return NULL;
}

for(i = 0; i < pascal_string->size; i++)
pascal_string->string[i] = stringC[i]; // here is my problem

return pascal_string;
}

int main()
{
char *c_string = "Mississippi";
PString *pascal_string;

pascal_string = newPascalString(c_string);
if (pascal_string != NULL) {
if (pascal_string->size == 11)
printf("the pascal string has length 11 excluding the terminating `'\\0'`.\n");
else
printf("the pascal string length is not 11.\n");
if (pascal_string->string != NULL) {
/* write to standard output exacly pascal_string->size characters */
/* printf will not work here, it needs `'\0'` at the end */
fwrite(pascal_string->string, 1, pascal_string->size, stdout);
printf("\n");
/* free pascal_string->string, allocated with
*
* pascal_string->string = malloc(pascal_string->size)
*/
free(pascal_string->string);
}
/* free pascal_string, allocated with
*
* pascal_string = malloc(sizeof(struct PascalString))
*/
free(pascal_string);
}
/* since pascal_string == NULL no need to call free */
return 0;
}

关于c - 如何使用struct将Pascal风格的字符串转换为C类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27602286/

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