| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:[求助]改正串的一个问题
只看楼主 加入收藏
绝对冰点
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-13
收藏
 问题点数:0 回复次数:8 
[求助]改正串的一个问题
我的水平很菜,所以写的程序也很菜,经常需要大家帮忙,我在这个论坛学到很多,之前学了c++,感觉我什么都没学到,感觉到学习编程的前途渺茫,但现在有了论坛的各位帮忙,有点感觉了。一段时间之后肯定会好起来的。

这个程序是将b串插入到a串的第i个之后,我写的总是运行不成功。希望大家帮忙看看。还有就是老是找不对位置。
#include <iostream>
#include <string.h>
using namespace std;
char *insert(char *,int,char *);
const int N=20;
void main()
{
char a[N]="abcdef";
char b[]="xyz";
cout << "input i\n";
int i;
cin >> i;
insert(a,i,b);
cout << a <<endl;
}
char *insert(char *m,int i,char *n)
{
if(strlen(m)+strlen(n)>=N)
cout << "overflow!\n";
else
{
int j;
for(j=strlen(m);j>=i;j--)
m[j+strlen(n)]=m[j];
for(j=0;j<=strlen(n);j++)
m[j+i-1]=n[j];
}
return m;
}

输入3
输出abxyz


2007-10-30 22:43
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 

for(j=strlen(m)-1;j>=i;j--)
m[j+strlen(n)]=m[j];
for(j=0;j<=strlen(n)-1;j++)
m[j+i]=n[j];


★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-30 22:57
chen17981
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-10-26
收藏
得分:0 
或许,更好的方法是利用string.

#include <iostream>
#include <string>

using namespace std;

int main()
{
string a = "aaaaaa";
string b = "bbbbbb";

int pos = 1;

b.insert(b.begin()+pos, a.begin(), a.end());

cout << b << endl;

return 0;
}

2007-10-31 00:32
poppylx
Rank: 1
等 级:新手上路
帖 子:367
专家分:0
注 册:2004-9-27
收藏
得分:0 
楼主要的就是算法~~~~

char *insert(char *m,int i,char *n)
{
int iFirstLen = strlen(m);
int iSecondLen = strlen(n);
if(iFirstLen + iSecondLen >=N || i > iFirstLen )
{
cout << "overflow!\n";
}
else
{
int j;
for( j = iFirstLen - 1; j > i - 1; --j)
{
m[ j + iSecondLen ] = m[j];
}
for( j = 0; j < iSecondLen; ++j)
{
m[ j + i ] = n[ j ];
}
}
return m;
}

动于心而静如水
2007-10-31 00:44
hegj
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-9-5
收藏
得分:0 
问个问题,2楼和4楼的做法,在字符串最后有'\0'吗?  貌似没有,但是输出正常。

2007-10-31 17:59
绝对冰点
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-13
收藏
得分:0 

j = iFirstLen - 1
这个语句不是把‘\0’给空出来了么?我个人认为。
见笑了

2007-10-31 20:58
vczxz
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-27
收藏
得分:0 
using namespace std;
我看了好多这个语句,是什么意思啊
本人不材,请教一下
2007-11-01 12:58
绝对冰点
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-13
收藏
得分:0 
我也是才知道不久,在vs2005中好像必须要加上这句,要不不能编译,具体原因也不知道
2007-11-01 20:28
hegj
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-9-5
收藏
得分:0 

还是不明白
以i = 3 为例
若 j = strlen(m)-1;
abcdef\0********
| |
| m[j+strlen(n)]
|
m[j]
于是变成
abcdefdef*******
|
|
m[j+i] = n[i]
于是变成
abcxyzdef*******
不是没有\0 吗?

using namespace std;
是使用名字空间std;
因为 cin,cout等都在名字空间中声明,如果不使用名字空间std 编译器就不知道cout,cin等,好像是这样的。
不对的请指出。



2007-11-01 22:38
快速回复:[求助]改正串的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028583 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved