ChaosSpring 2022-03-25 18:13 采纳率: 100%
浏览 147
已结题

c++用char数组存储字符串

#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
using namespace std;

int cal_row() // calculate the row of textfile
{
    ifstream textfile;
    textfile.open("textfile.txt");
    textfile >> noskipws;
    int row = 1;
    char char1;
    while (textfile >> char1)
    {
        if (char1 == '\n')
        {
            ++row;
        }
    }
    return row;
}



char data()
{
    ifstream textfile;
    textfile.open("textfile.txt");
    textfile >> noskipws;
    char line, char2;
    int row, len = 1000, tlen;
    row = cal_row();
    tlen = row * len + 1;
    char data1[tlen];
    char *data2[tlen];
    len = 0;
    while (textfile >> char2) // store text as an array
    {
        if (char2 != '\n')
        {
            data1[len++] = char2;
        }
        else
        {
            data1[len++] = '\n';
        }
    }
    for (int i = 0; i <= tlen; i++) // uppercase to lowercase
    {
        if ((int)data1[i] <= 90 && (int)data1[i] >= 65)
        {
            data1[i] += 32;
        }
    }


    return *data1;
}



int main()
{
    int row = cal_row(), tlen = row * 1000 + 1, len1, len2, len3;
    len1 = len2 = len3 = 0;
    char text1[tlen], text2[row][20][51];
    *text1 = data();
    return 0;

我想知道如何修改代码,使得主函数中text1的数组可以和data函数中的返回值相同(即text1=分函数中的data1)

  • 写回答

2条回答 默认 最新

  • stone_wangzx 2022-03-25 18:37
    关注
    
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <cstring>
    using namespace std;
    
    int cal_row() // calculate the row of textfile
    {
        ifstream textfile;
        textfile.open("textfile.txt");
        textfile >> noskipws;
        int row = 1;
        char char1;
        while (textfile >> char1)
        {
            if (char1 == '\n')
            {
                ++row;
            }
        }
        return row;
    }
    
    
    
    std::string data()
    {
        ifstream textfile;
        textfile.open("textfile.txt");
        textfile >> noskipws;
        char line, char2;
        int row, len = 1000, tlen;
        row = cal_row();
        tlen = row * len + 1;
        //char data1[tlen];//两点错误:数组长度必须是常量;data1是局部变量,不能作为返回值,因为出了函数,data1就被释放了
        char* data1 = new char[tlen];
       // char* data2[tlen];
        len = 0;
        while (textfile >> char2) // store text as an array
        {
            if (char2 != '\n')
            {
                data1[len++] = char2;
            }
            else
            {
                data1[len++] = '\n';
            }
        }
        for (int i = 0; i <= tlen; i++) // uppercase to lowercase
        {
            if ((int)data1[i] <= 90 && (int)data1[i] >= 65)
            {
                data1[i] += 32;
            }
        }
        std::string retValue(data1);
        delete[] data1;
    
        return retValue;
    }
    
    
    
    int main()
    {
        int row = cal_row(), tlen = row * 1000 + 1, len1, len2, len3;
        len1 = len2 = len3 = 0;
        //char text1[tlen], text2[row][20][51];
        char* text1 = new char[tlen];
        //*text1 = data();
        std::string value = data();
        strcpy(text1, value.c_str());
        //或者 memcpy(text1, value.c_str(), value.length() + 1);
        delete[] text1;
        return 0;
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 修改了问题 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀