| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1193 人关注过本帖
标题:只输入字母和*号,输出是结果是将前面的*放到字符串的尾部
只看楼主 加入收藏
淡水鱼·到海
Rank: 2
等 级:论坛游民
帖 子:30
专家分:26
注 册:2013-9-12
收藏
得分:0 
回复 20 楼 TonyDeng
恩,谢谢!^_^
2014-09-05 15:05
hackrol
Rank: 4
来 自:世界和平组织
等 级:业余侠客
帖 子:62
专家分:267
注 册:2014-9-6
收藏
得分:0 
我觉得吧,,你做个链表就可以很容易实现这个功能了!!!
2014-09-06 23:01
hackrol
Rank: 4
来 自:世界和平组织
等 级:业余侠客
帖 子:62
专家分:267
注 册:2014-9-6
收藏
得分:0 
void fun(char *a)
{
    int i=0,n,m;
    char *b;
    b=a;
    while(*b=='*')
     {i++;b++;}
     m=i;
     for(;*b!='\0';)
     *a++=*b++;
       // a[j]=b[i++];/*是不是这儿错了*/
    for(n=0;n<m;n++)
        *a++='*';
    *a='\0';
}
2014-09-06 23:18
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
void fun(char *a)
{
    int i=0,j,n,m;
    char *b;  
    b=a;
    while(b[i]=='*') //此处有问题
        i++;
    m=i;
    for(j=0;b[i]!='\0';j++) //这里错了
        a[j]=b[i++];/*是不是这儿错了*/
    for(n=0;n<m;n++)
        a[j++]='*';
    a[j]='\0';
}
2014-09-07 05:35
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
楼主想采用练习使用指针的用法,引入指针b来指向a的地址,通过移动指针b来实现修改数组a中的元素,理论上是可行的,但代码中没有对指针b进行移动操作,所以出问题了,若要移动指针b,可使用以下代码:
 void fun(char *a)
{
    int i=0,j,n,m;
    char *b;  
    b=a;
    while(*(b++) =='*') //直接移动指针b
        i++;
    m=i;
    for(j=0;*(b)!='\0';j++) //直接移动指针b
        a[j]=*(b++);
    for(n=0;n<m;n++)
        a[j++]='*';
    a[j]='\0';
}
2014-09-07 05:42
巧若拙
Rank: 4
来 自:宁波余姚
等 级:业余侠客
威 望:1
帖 子:159
专家分:273
注 册:2014-8-24
收藏
得分:0 
当然,如果只是想达到移动数组a中元素的目的,则不引入指针b也无妨,只需记录下数组前面*的数量,将其移到后面即可。代码如下:
void fun(char *a)
{
    int i=0,m;
   
    while(a[i] != '\0' &&  a[i] =='*') //计算*的数量
    {
        i++;
    }
    m=i;
    while(a[i] != '\0')//移动数组元素
    {
        a[i-m]= a[i];
        i++;
    }
    for(i-=m;a[i] != '\0';i++)//添加*
        a[i]='*';
}
2014-09-07 05:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
扫描一趟就可以了,用不着那么多循环。

授人以渔,不授人以鱼。
2014-09-07 16:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

char str[] = "****dfs*hu*j";

int main(void)
{
    size_t length = strlen(str);
    size_t index, pos;
    bool found = false;

    puts(str);

    for (index = 0, pos = 0; (index < length) || (pos < length); ++index)
    {
        if (str[index] != '*')
        {
            found = true;
        }
        if (found)
        {
            str[pos] = str[index];
            if (index >= length)
            {
                str[pos] = '*';
            }
            ++pos;
        }
    }

    puts(str);

    _getch();
    return EXIT_SUCCESS;
}



授人以渔,不授人以鱼。
2014-09-07 16:53
nixk
Rank: 2
等 级:论坛游民
帖 子:32
专家分:12
注 册:2014-9-10
收藏
得分:0 
while(b[i] == '*')
        i++;
============================================  
  for(j=0;b[i] !='\0';j++)
        a[j]=b[i++];/*是不是这儿错了*/  
这么写就行了
2014-09-10 23:02
fogmaple
Rank: 4
来 自:江西省赣州市于都县
等 级:业余侠客
威 望:1
帖 子:119
专家分:233
注 册:2014-7-28
收藏
得分:0 
看下运行代码运行结果
2014-09-11 08:13
快速回复:只输入字母和*号,输出是结果是将前面的*放到字符串的尾部
数据加载中...
 
   



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

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