c++ - 使用 C++ 在文件上保存一个字符指针

标签 c++ file pointers

您好,我遇到了一个程序的问题,该程序接收用户提供的文本字符串并做了 3 件事:

  1. 将所有元音字母转换为大写字母,打印新文本并打印转换后的元音字母数。
  2. 将新文本保存到文件中。
  3. 逐字符打印转换后的文本。

代码如下

#include <stdio.h>
void convert(char *ptrQuote[80], int nvocals);
void save(char *ptrQuote[80]);
void print(char *ptrQuote[80]);

int main(int argc, char** argv) {

    char  quote[80];
    char *ptrQuote[80];
    int nvocals= 0;
    printf("Enter your quote :\n");
    scanf("%s", &quote);
    for(int i= 0; i<80; i++)
    {
        ptrQuote[i]= &quote[i];
    }
    convert(ptrQuote, nvocals);
    save(ptrQuote);
    print(ptrQuote);
    return 0;
}

void convert(char *ptrQuote[80], int nvocals)
{
    for(int i=0; i<80; i++)
    {
        if(*ptrQuote[i]=='a')
        {
            *ptrQuote[i]='A';
            nvocals ++;
        }

        if(*ptrQuote[i]=='e')
        {
            *ptrQuote[i]='E';
            nvocals ++;
        }

        if(*ptrQuote[i]=='i')
        {
            *ptrQuote[i]='I';
            nvocals ++;
        }

        if(*ptrQuote[i]=='o')
        {
            *ptrQuote[i]='O';
            nvocals ++;
        }

        if(*ptrQuote[i]=='u')
        {
            *ptrQuote[i]='U';
            nvocals ++;
        }

    }

    printf("%s\n", *ptrQuote);
    printf("Number of vocals: %d\n", nvocals);
}

void save(char *ptrQuote[80])
{
    FILE *quote;
    quote= fopen("quote.txt", "w");
    fwrite(&ptrQuote[80], sizeof(*ptrQuote), 1, quote);
    fclose(quote);
}

void print(char *ptrQuote[80])
{
    for(int i=0; i<sizeof(*ptrQuote); i++)
    {
        printf("%c", *ptrQuote[i]);
    }
}

第一个功能正常工作,但是当涉及到保存和打印功能时,它会保存并打印不完整的报价。如您所见,我正在使用指针。我能做些什么?谢谢。

最佳答案

你很接近。不要为您的代码使用 80 个指针(可能是 一点点 过高),只需使用一个:

#include <stdio.h>
void convert(char ptrQuote[80], int nvocals);
void save(char ptrQuote[80]);
void print(char ptrQuote[80]);

int main(int argc, char **argv) {
    char  quote[80];
    int nvocals = 0;
    printf("Enter your quote :\n");
    scanf("%s", &quote);
    convert(quote, nvocals);
    save(quote);
    print(quote);
    return 0;
}

void convert(char ptrQuote[80], int nvocals)
{
    for(int i=0; i<80; i++)
    {
        if(ptrQuote[i]=='a')
        {
            ptrQuote[i]='A';
            nvocals ++;
        }

        if(ptrQuote[i]=='e')
        {
            ptrQuote[i]='E';
            nvocals ++;
        }

        if(ptrQuote[i]=='i')
        {
            ptrQuote[i]='I';
            nvocals ++;
        }

        if(ptrQuote[i]=='o')
        {
            ptrQuote[i]='O';
            nvocals ++;
        }

        if(ptrQuote[i]=='u')
        {
            ptrQuote[i]='U';
            nvocals ++;
        }

    }

    printf("%s\n", ptrQuote);
    printf("Number of vocals: %d\n", nvocals);
}

void save(char ptrQuote[80])
{
    FILE *quote;
    quote = fopen("quote.txt", "w");
    fwrite(ptrQuote, sizeof(*ptrQuote), 1, quote);
    fclose(quote);
}

void print(char ptrQuote[80])
{
    /* no need for loop here anymore */
    printf("%s\n", ptrQuote);
}

您还可以打印到文件(使用您的方法):

for (int i = 0; i < 80; ++i)
    fputc(*ptrQuote[i], quote);

关于c++ - 使用 C++ 在文件上保存一个字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33001042/

相关文章:

java - 如何考虑方法中的少数参数

c - 如果字符为 null,则打印 null

c++ - 精度损失 - 使用 srand 时发出警告

c++ - C或C++语言中的数组实际上是指针吗

c++ - 尝试模拟纯虚拟类

node.js - 如何提供使用 fs.readFile 读取的文件

c++ - 通过带有成员函数指针的 QHash 调用成员函数的正确方法

cocoa - 将多个 NSTextView 元素中的数据写入单个文件

javascript - JavaScript 中的函数指针数组?

c - 在 C 中释放 char[] 会出现错误,C 编译器如何处理该 char[]