xian云 2016-06-25 10:05 采纳率: 100%
浏览 1024
已采纳

在首单词前插入时,中间的空格会变成i ,请大神解答,谢谢

#include
#include
#include

int startwhere(char longchar[100],char befchar[20]) //找位置函数
{
unsigned int i,k=0;
int flg=1;

for(i=0;i<strlen(longchar)-strlen(befchar)+1;i++)
{
        if(flg==1)
        {
            for(k=0;k<strlen(befchar)+i;k++)
            {
                if(longchar[k+i]!=befchar[k])
                    break; 
            }
                if(k>=strlen(befchar))
                {
                    return i;
                }
        }

        flg=0;

        if(longchar[i]== ' ')
            flg=1;
}
return -1;

}

int charmove(char longchar[100], int start,int len) //移动字符串,腾出空间
{
int i;

if(start+len>100)
    return 0 ;

for(i=strlen(longchar);i>=start;i--)
{
    longchar[i+len+1]=longchar[i];
}
longchar[i]=32;
return 1;

}

void insert(char longchar[100],char subchar[20],int start) //在腾出的空间插入子串
{
unsigned int i;

for(i=0;i<strlen(subchar);i++)
{
    longchar[start+i]=subchar[i];
}

}

void main()
{
char longchar[100];
char subchar[20];
char befchar[20];

int start;
int i;

printf("请输入源字符串\n");
gets(longchar);
printf("请输入要插入的子串\n");
gets(subchar);
printf("请输入要插入在哪个单词之前\n");
gets(befchar);

    start=startwhere(longchar,befchar);
    i=charmove(longchar,start,strlen(subchar));

        if(i==1)
        {
            insert(longchar,subchar,start);
        }
        else
        {
            printf("you input error\n");
        }

        puts(longchar);

}

  • 写回答

3条回答 默认 最新

  • threenewbee 2016-06-25 15:43
    关注

    空格插入的位置不对,应该是插入新单词的后面,修改的程序:

     #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int startwhere(char longchar[100],char befchar[20])     //找位置函数
    {
        unsigned int i,k=0;
        int flg=1;
    
        for(i=0;i<strlen(longchar)-strlen(befchar)+1;i++)
        {
                if(flg==1)
                {
                    for(k=0;k<strlen(befchar)+i;k++)
                    {
                        if(longchar[k+i]!=befchar[k])
                            break; 
                    }
                        if(k>=strlen(befchar))
                        {
                            return i;
                        }
                }
    
                flg=0;
    
                if(longchar[i]== ' ')
                    flg=1;
        }
        return -1;
    }
    
    int charmove(char longchar[100], int start,int len)     //移动字符串,腾出空间
    {
        int i;
    
        if(start+len>100)
            return 0 ;
    
        for(i=strlen(longchar);i>=start;i--)
        {
            longchar[i+len+1]=longchar[i];
        }
        return 1;
    }
    
    void insert(char longchar[100],char subchar[20],int start)  //在腾出的空间插入子串
    {
        unsigned int i;
    
        for(i=0;i<strlen(subchar);i++)
        {
            longchar[start+i]=subchar[i];
        }
        longchar[start+i]=32;
    }
    
    void main()
    {
        char longchar[100];
        char subchar[20];
        char befchar[20];
    
        int start;
        int i;
    
        printf("请输入源字符串\n");
        gets(longchar);
        printf("请输入要插入的子串\n");
        gets(subchar);
        printf("请输入要插入在哪个单词之前\n");
        gets(befchar);
    
            start=startwhere(longchar,befchar);
            i=charmove(longchar,start,strlen(subchar));
    
                if(i==1)
                {
                    insert(longchar,subchar,start);
                }
                else
                {
                    printf("you input error\n");
                }
    
                puts(longchar);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型