曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5413|回复: 0
打印 上一主题 下一主题

字符串的插入

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2009-7-31 13:07:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实现一个字符串插入另外一个字符串中。程序中没做很严格的检查,算法或许显得冗长拖沓。

完整代码如下
#include <stdio.h>
#include <string.h>

/*--------------*/
/*插入字符串    */
/*--------------*/

void strinsert (char *str1, char *str2, int pos)
{
    int slen;
    int dlen;
    int i;
    int flag = 0;
    pos -= 2;    //程序判断(从0算起)和用户定位习惯不同(从1算起)

    slen = strlen (str1) + 1;   
    dlen = strlen (str2);

    if (str1 [pos + 1] == ' ') {   //处理插入位置是空格情况
        flag = 1;   
        for (i = slen - pos; i > 0; i--) {
            str1 [slen + dlen +1] = str1 [slen];    //多移动1位以保持插入后插入字符串前后都有空格
            slen--;
        }
    } else {
        for (i = slen - pos; i > 0; i--) {        //插入位置无空格情况
            str1 [slen + dlen] = str1 [slen];
            slen--;
        }
    }
   
    if (flag == 1)
        pos += 2;    //调整插入位置(在空格后插入)
     else
        pos += 1;    //在下一个字母后插入
   
    for (i = 0; i < dlen; i++)
        str1 [pos + i] = str2 [i];
}

int main (void)
{
    char string1 [512];
    char string2 [512];
    int pos;
    int len;

    printf ("输入原始字符串 ==> ");
    fgets (string1, 256, stdin);
    len = strlen (string1);
    string1 [len-1] = '\0';

    printf ("输入插入字符串 ==> ");
    fgets (string2, 256, stdin);   
    len = strlen (string2);
    string2 [len-1] = '\0';



    printf ("输入要插入的位置 ==> ");
    scanf ("%d", &pos);

    strinsert (string1, string2, pos);
   
    printf("插入后的字符串: ");
    printf("%s\n", string1);

    return (0);
}
运行及输出
beyes@linux-beyes:~/C/structer> ./strinsert2.exe
输入原始字符串 ==> hello world
输入插入字符串 ==> linux
输入要插入的位置 ==> 6
插入后的字符串: hello linux world
beyes@linux-beyes:~/C/structer> ./strinsert2.exe
输入原始字符串 ==> svice
输入插入字符串 ==> er
输入要插入的位置 ==> 2
插入后的字符串: service
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 04:44 , Processed in 0.113926 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表