这么简单的问题我都解决不了

hy1080 2004-10-22 09:26:57
把一个字符串如:"a a a a a"写入另一个缓冲区,使其变成
“a a a a a",
原题是,把一个字符串加入空格如“aaaaa"=>"a a a a a"
后来发现如果原字符串中有空格,
无法正确分解。
...全文
146 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hy1080 2005-01-27
  • 打赏
  • 举报
回复
问题解决了,不是程序的问题,而是DOS shell控制台的问题,
在控制台下,只要输入入空格,shell会把他解释成是两个“实参”
所以在程序中用main(int argc, char **argv)的argv传入的参数
只要有空格结果就不会正确^_^
qibo999 2004-10-22
  • 打赏
  • 举报
回复
TC我这里没有,但原理是一样的,全部用C代码应该没错。
不过你给出的“语法分析”规则不全,所以也没法写.只要你根据规则将各种情况考虑清楚,写代码应该不成问题的。
3996906 2004-10-22
  • 打赏
  • 举报
回复
这样能改了吧,我没有tc~~~~~~~
AnsiString li = "";
char *pbuf = str.c_str();

li += *pbuf;
pbuf++;
do{
if(*pbuf == 'a')
{
li += " ";
li += *pbuf;
pbuf++;
continue;
}
li += *pbuf;
pbuf++;
}while(*pbuf != '\0');

return li;
hy1080 2004-10-22
  • 打赏
  • 举报
回复
我要这样写函数
int Func(const char *source, char *dec)
source是输入的源字符串
dec是返回的返冲区,
int返回错误代码
如输入字符串"a00b00" => "a00 b00"
如输入字符串"a00 b00" => "a00 b00"
实际一种工控语言的语法分析,
要求在用户输入字符串之后马上给格式化成一个规范的字符串.
hy1080 2004-10-22
  • 打赏
  • 举报
回复
对不起大家,忘了说,要求在TC下通过
3996906 2004-10-22
  • 打赏
  • 举报
回复
晕啊,没注意字符的大小
这样就看出来了
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString a = "a a a a a";
AnsiString t="";
int i;
for(i=1;i<a.Length();i++)
{
t += AnsiString(a[i]);
t += " ";
}
t += a[i];
ShowMessage(t + " a a a a a");
}
Maconel 2004-10-22
  • 打赏
  • 举报
回复
如果不管原字符串是怎么样的,都是隔一个字符加一个空格,那么用
qibo999(行路者) 的函数就可以了,如果原字符串的空格就算是空格了,那么就改为下边这样,加个判断。

AnsiString AddBlank(AnsiString a)
{
AnsiString t="";
int i;
for(i=1;i<a.Length();i++)
{
t += AnsiString(a[i]);
if (a[i] == ' ') continue;
t += " ";
}
t += a[i];
return t;
}

如果原字符串中有多个空格,只保留一个,就先把原字符串里空格都去掉,在用qibo999(行路者) 的函数。
3996906 2004-10-22
  • 打赏
  • 举报
回复
哎~~~~~~我换成别的字符就好,两个空格程序就当成一个处理了
liujiin 2004-10-22
  • 打赏
  • 举报
回复
先把字符串的空格去掉,再在中间加空格
qibo999 2004-10-22
  • 打赏
  • 举报
回复
很简单啊:
AnsiString AddBlank(AnsiString a)
{
AnsiString t="";
int i;
for(i=1;i<a.Length();i++)
{
t += AnsiString(a[i]);
t += " ";
}
t += a[i];
return t;
}
我不懂电脑 2004-10-22
  • 打赏
  • 举报
回复
没看懂
laisf 2004-10-22
  • 打赏
  • 举报
回复
取原字符串时跳过空格不行吗?
setdefault 2004-10-22
  • 打赏
  • 举报
回复
char s[20]="a a a a a";
char c1,c2,c3,c4,c5;
sscanf(s,"%c%c%c%c%c",c1,c2,c3,c4,c5);
sprintf(s,"%c %c %c %c %c",c1,c2,c3,c4,c5);
yjy1001 2004-10-22
  • 打赏
  • 举报
回复
改进一点
AnsiString AddBlank(AnsiString a)
{
AnsiString t="";
int i;
for(i=1;i<a.Length();i++)
{
t += AnsiString(a[i]);
if (a[i] != ' ')//不是空格,才添加一个空格...
t += " ";
}
t += a[i];
return t;
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧