bronya1465124479 2023-03-12 11:49 采纳率: 82.6%
浏览 12
已结题

不知道为什么插入串2后输出会出现乱码,希望有人能教一下要怎么修改

程序目的是为将串2插入串1某一指定位置中
不知道为什么插入串2后输出会出现乱码,希望有人能教一下要怎么修改
插入函数在35行

img

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
#define false 0
#define true 1

typedef struct str
{
    char data[MaxSize];
    int length;
}SqString;

void InitSqString(SqString* str1, SqString* str2)
{
    str1->length = str2->length = 0;
}

void StrAssign(SqString* str1, SqString* str2,char *a,char *b)
{
    int i=0;
    while (a[i]!='\0')
    {
        str1->length++;
        str1->data[str1->length - 1] = a[i];
        i++;
    }
    i = 0;
    while (b[i] != '\0')
    {
        str2->length++;
        str2->data[str2->length - 1] = b[i];
        i++;
    }
}
int InsertStr(SqString* str1, SqString* str2, int post)
{
    if (post<0 || post-1>str1->length) {
        printf("error\n");
        return false;
    }
    int i;
    for (i = post - 1; i < str1->length; i++)
    {
        str1->data[post + str2->length] = str1->data[i];
    }
    for (i = 0; i < str2->length; i++)
    {
        str1->data[post - 1 + i] = str2->data[i];
    }
    str1->length += str2->length;
    return true;
}

void printStr(SqString *str1)
{
    int i;
    for (i = 0; i < str1->length; i++)
    {
        printf("%c", str1->data[i]);
    }
}

int main()
{
    SqString str1,str2;
    char a[10] = "abcde", b[10] = "fghij";
    int post;
    InitSqString(&str1, &str2);
    StrAssign(&str1, &str2, a, b);
    printf("please enetr postion of you want to insert\n");
    scanf_s("%d", &post);
    InsertStr(&str1, &str2, post);
    printStr(&str1);
}

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2023-03-12 12:14
    关注

    你初始化的时候,需要将字符数组所有元素初始化为0。你的代码缺少字符串结束符
    另外插入函数中,第一个for循环应该采用倒序移动,否则可能会产生字符覆盖现象,修改如下:

    
    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>
    #define MaxSize 100
    #define false 0
    #define true 1
     
    typedef struct str
    {
        char data[MaxSize];
        int length;
    }SqString;
     
    void InitSqString(SqString* str1, SqString* str2)
    {
        str1->length = str2->length = 0;
        memset(str1->data,0,MaxSize);
        memset(str2->data,0,MaxSize);
    }
     
    void StrAssign(SqString* str1, SqString* str2,char *a,char *b)
    {
        int i=0;
        while (a[i]!='\0')
        {
            str1->length++;
            str1->data[str1->length - 1] = a[i];
            i++;
        }
        i = 0;
        while (b[i] != '\0')
        {
            str2->length++;
            str2->data[str2->length - 1] = b[i];
            i++;
        }
    }
    int InsertStr(SqString* str1, SqString* str2, int post)
    {
        if (post<0 || post-1>str1->length) {
            printf("error\n");
            return false;
        }
        int i;
        for(i=str2->length-1;i>=0;i--)
        {
            str1->data[i + str2->length] = str1->data[i];
        }
        for (i = 0; i < str2->length; i++)
        {
            str1->data[post - 1 + i] = str2->data[i];
        }
        str1->length += str2->length;
        return true;
    }
     
    void printStr(SqString *str1)
    {
        int i;
        for (i = 0; i < str1->length; i++)
        {
            printf("%c", str1->data[i]);
        }
    }
     
    int main()
    {
        SqString str1,str2;
        char a[10] = "abcde", b[10] = "fghij";
        int post;
        InitSqString(&str1, &str2);
        StrAssign(&str1, &str2, a, b);
        printf("please enetr postion of you want to insert\n");
        scanf_s("%d", &post);
        InsertStr(&str1, &str2, post);
        printStr(&str1);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
  • ¥15 unity连接Sqlserver
  • ¥15 图中这种约束条件lingo该怎么表示出来
  • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
  • ¥15 流式socket文件传输答疑
  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接