荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bakey (熊出没), 信区: Program
标  题: [合集]问个很简单的问题
发信站: 荔园晨风BBS站 (2005年11月14日12:41:14 星期一), 站内信件

☆   1  ──────────── 我是分割线 ─────────────────☆
发信人: ORLICKYANG (单行道), 信区: Program
标  题: 问个很简单的问题
时  间: 2005年10月14日13:13:12 星期五

可我就是找不到,如何在一个字符串后面插入一个字符,有没有专门的函数?字符串与字
符串合并我就知道。谢谢啦


☆   2  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日13:20:07 星期五

 strcat吧。就相当于连接两个字符串。




☆   3  ──────────── 我是分割线 ─────────────────☆
发信人: ORLICKYANG (单行道), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日13:33:04 星期五

我试过了,strcat(_,_)里面的两个参数必须是char型的指针,也就是字符串名,我也试过
把其中一个参数设为指向一个字符的指针,但打印出来是乱码。有没有其他方法,还是得
( 小mos —> L㊣VE) 的大作中提到: 】:  strcat吧。就相当于连接两个字符串。


☆   4  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日14:40:02 星期五

 那个字符后面得跟着个 \0




☆   5  ──────────── 我是分割线 ─────────────────☆
发信人: ORLICKYANG (单行道), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日15:22:36 星期五

你的意思是把char ch = 'a'改为char ch = 'a\0'还是char ch = "a\0",我试过了,是非
法的,但char ch[] = "a\0"是合法的,我又想知道如何将char ch = 'a',这个字符变成"
a\0"这个字符串呢?因为我每次得到的只是一个字符,而想把每次得到的字符逐个连接在
一起成为字符串,是否得用堆栈才能解决呢?谢谢
 L㊣VE) 的大作



☆   6  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日15:24:44 星期五


 char只是一个字节的大小你放两个字节内容当然是不行的。
 堆栈太麻烦了,字符串数组方式操作吧,最后加多一个 \0 即可。




☆   7  ──────────── 我是分割线 ─────────────────☆
发信人: achang (阿昌), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日16:42:56 星期五

是不是没给字符串数组分配足够的空间,或没有分配?
例如一下例子中的a[30]

#include <stdio.h>
#include <string.h>

int main()
{
    char a[30]="achan";
    char b[]="g";

    printf("%s\n",strcat(a,b));
    printf("%s\n",a);

    return 0;
}

输出:
achang
achang
Press any key to continue




☆   8  ──────────── 我是分割线 ─────────────────☆
发信人: achang (阿昌), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日16:46:42 星期五

加那个东西后还是字符吗?




☆   9  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日17:26:09 星期五

 是个string。他就是因为没有结束符所以后面跟着一堆乱码




☆  10  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (三日不见,如隔24抽), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日22:14:13 星期五

//hand



☆  11  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (三日不见,如隔24抽), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日22:15:06 星期五

很明显char ch = 'a\0',你怎么能在单个字符的定义下加个\0呢
它也站一个字符位的啊



☆  12  ──────────── 我是分割线 ─────────────────☆
发信人: oopilix (优雅的), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日22:27:50 星期五

字符数组串 如果插入一个字符能保证总长度仍小于数组长度就行。
char str[10]="test";
s[strlen(s)]='A';
s[strlen(s)+1]='\0';
可以自己改成函数


☆  13  ──────────── 我是分割线 ─────────────────☆
发信人: oopilix (优雅的), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日22:28:54 星期五

strcpy(str,"A");其实就很现成了。
字符数组串 如果插入一个字符能保证总长度仍小于数组长度就行。
char str[10]="test";
s[strlen(s)]='A';
s[strlen(s)+1]='\0';
可以自己改成函数


☆  14  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (三日不见,如隔24抽), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日22:38:21 星期五

????不一样的吧,他不是要连接的吗?
你这个是拷贝了吧



☆  15  ──────────── 我是分割线 ─────────────────☆
发信人: oopilix (优雅的), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月14日22:46:26 星期五

是strcat.


☆  16  ──────────── 我是分割线 ─────────────────☆
发信人: ORLICKYANG (单行道), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月15日11:08:56 星期六

strcat(str,"a"),固然是好,可我不是要把"a"这个字符串连接到str后面,而是要把'a'这
个字符连接到str后面,如果有把单字符串转换成字符的函数那还好,没有的话就得自己编


☆  17  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月15日12:55:04 星期六


 给你个最简单的办法:

 sprintf(str, "%s%c", str, ch );




☆  18  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (三日不见,如隔24抽), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月15日18:51:08 星期六

实在是不明白你究竟想做什么....



☆  19  ──────────── 我是分割线 ─────────────────☆
发信人: oopilix (优雅的), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月16日19:42:51 星期天

能实现就行,编一个咋啦。。函数可以自己写嘛。
转换一下都懒
strcat(str,"a"),固然是好,可我不是要把"a"这个字符串连接到str后面,而是要把'a'这
个字符连接到str后面,如果有把单字符串转换成字符的函数那还好,没有的话就得自己编


☆  20  ──────────── 我是分割线 ─────────────────☆
发信人: achang (阿昌), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月16日21:17:21 星期天

标准C好像不支持sprintf()




☆  21  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月16日23:19:13 星期天

 我不知道




☆  22  ──────────── 我是分割线 ─────────────────☆
发信人: oopilix (优雅的), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月16日23:23:35 星期天

就是标准c的。
标准C好像不支持sprintf()




☆  23  ──────────── 我是分割线 ─────────────────☆
发信人: zoj (三生有幸), 信区: Program
标  题: Re: 问个很简单的问题
时  间: Mon Oct 17 14:19:08 2005

sprintf是标准C函数库里的

楼主的想法,大概是把每次得到的一个字符拼成一个字符串
其实可以定义一个字符数组,每得到一个就往里写一个




☆  24  ──────────── 我是分割线 ─────────────────☆
发信人: ORLICKYANG (单行道), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月18日18:00:38 星期二

我在前几天已经想到解决的办法了,虽然不是很完美,也还没考虑指针的delete,但还能
用。
char *str_cat(char *str,char ch)
{
    char *new_str = new char[strlen(str)+1];
    strcpy(new_str,str);
    new_str[strlen(str)]= ch;
    new_str[strlen(str)+1] = '\0';
    return new_str;
}
调用的时候可以这样:str = str_cat(str,ch);其中char *str = new char(0);char ch;



☆  25  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (三日不见,如隔24抽), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月18日18:05:29 星期二

..........................................



☆  26  ──────────── 我是分割线 ─────────────────☆
发信人: ORLICKYANG (单行道), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月18日18:07:29 星期二

莫非您有更好的办法?愿意赐教,谢谢啦~~


☆  27  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月18日18:09:46 星期二

 佩服~牛人~~




☆  28  ──────────── 我是分割线 ─────────────────☆
发信人: ORLICKYANG (单行道), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月18日18:17:39 星期二

灵感来自上面一位仁兄,其实有剽窃嫌疑,总感觉new_str没有被delete不大好。想问一下
调用完之后new_str会被自动delete么?谢谢~~~~~]
VE) 的大作中提到: 】:  佩服~牛人~~


☆  29  ──────────── 我是分割线 ─────────────────☆
发信人: mmkiller (小mos —> L㊣VE), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月18日18:19:03 星期二

 不会。。。
 总体来说这个还是太烦了。还不如试一下 STL 得string。
 有个 append() function.




☆  30  ──────────── 我是分割线 ─────────────────☆
发信人: oopilix (优雅的), 信区: Program
标  题: Re: 问个很简单的问题
时  间: 2005年10月18日18:50:52 星期二


怎么切换成c++了,能用c++的话可以封装成类。稀构函数delete释放。


☆  31  ──────────── 我是分割线 ─────────────────☆
发信人: zoj (三生有幸), 信区: Program
标  题: Re: 问个很简单的问题
时  间: Tue Oct 18 18:52:50 2005

函数体内的局部变量在函数结束时自动消亡
但是指针消亡了,不代表它所指的的内存会被自动释放




☆  32  ──────────── 我是分割线 ─────────────────☆
发信人: zoj (三生有幸), 信区: Program
标  题: Re: 问个很简单的问题
时  间: Tue Oct 18 19:08:50 2005

你可以试下这种方法

char sStr[1000];
char sCh;

memset(sStr, 0, sizeof(sStr));

sStr[strlen(sStr)] = sCh;

下标不一定要这样,看你具体怎么用来改吧


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店