| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3720 人关注过本帖
标题:我想编一函数可以删去字符串中的字符的,拜托帮我看一看
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在上面做两个数组,一个源串,一个目标串,逐个分拣即可。

授人以渔,不授人以鱼。
2015-12-09 23:22
你若为王
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2015-11-15
收藏
得分:0 
回复 23楼 TonyDeng
#include<stdio.h>
#include<string.h>
int main()
{void fun(char a[]);
char str[20];
scanf("%s",str);fun(str);
printf("%s",str);
return 0;
}
void fun(char a[])
{
   
    int i,j=0,k;
    k=strlen(a);
   
    for(i=0;i<k;i++)
    {
        if(a[i]<'0'||a[i]>'9')
           {
            a[j]=a[i];
            j++;
            }
   }
 }      这样哪里错了
2015-12-09 23:36
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:2 
以下是引用你若为王在2015-12-9 23:36:57的发言:

#include<stdio.h>
#include<string.h>
int main()
{void fun(char a[], char b[], int);
char str[20],str1[20];
scanf("%20s",str);fun(str,str1,20);
printf("%s",str1);
return 0;
}
void fun(char a[], char b[], int len)
{
   
    int i,j=0,k;
    k=strlen(a);
   
    for(i=0;i<k;i++)
    {
        if(!(a[i]>='0' && a[i]<='9'))
           {
            if(j<len-1) {
            b[j]=a[i];
            j++;}
            }
   }
b[j]='\0';
 }      这样哪里错了


大概是T版的意思,按你学过的数组弄的话,差不多是这个样子吧,手机码的,没验证。

我们都在路上。。。。。
2015-12-10 01:05
你若为王
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2015-11-15
收藏
得分:0 
回复 25楼 hellovfp
谢谢哦。你的是对的,不过两个形式参数就可以了。应该算长度k就是了。原来我的程序是少了字符串结束标识符。
2015-12-10 19:34
丁松
Rank: 2
来 自:重庆
等 级:论坛游民
威 望:1
帖 子:41
专家分:75
注 册:2015-11-11
收藏
得分:2 
回复 楼主 你若为王
#include<stdio.h>
#include<string.h>
void fun(char a[])
{
    char str[20];
    int i,j=0,k;
    k=strlen(a);
   
    for(i=0;i<k;i++)
    {
        if(a[i]!=NULL)
            str[i]=NULL;
        i++;
    }
    printf("%s\n",str);
}
void main()
{
    char str[20];
    scanf("%s",str);
    //printf("%s\n",str);
    fun(str);
}
2015-12-10 21:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
以下是引用你若为王在2015-12-10 19:34:17的发言:

谢谢哦。你的是对的,不过两个形式参数就可以了。应该算长度k就是了。原来我的程序是少了字符串结束标识符。

任何时候都需要传入目标字符数组的容量。

授人以渔,不授人以鱼。
2015-12-10 22:23
码程小伙
Rank: 2
等 级:论坛游民
威 望:1
帖 子:27
专家分:81
注 册:2015-12-11
收藏
得分:2 
你这代码j在判断的外面,那它不是一直加到k-1而你又删除了一些数,最后还返回str(j)那不就是只返回str(k-1)这一个值吗,而且这个里面又没东西,当然没输出了
2015-12-11 11:21
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
以下是引用wmf2014在2015-12-9 22:11:47的发言:

//下述代码是显示过滤数字后的代码,没考虑数组长度,溢出危险很大。
#include <stdio.h>
int main()
{
    char* fun(char *a,int n);
    char str[20];
    scanf("%s",str);
    printf("%s",fun(str,20));
    return 0;
}
char* fun(char *a,int n)
{
    char* p,*s;
    for(p=a,s=a;*a;a++)
    {
        *p=*a;
        if(*a<'0'||*a>'9')p++;
    }
    *p=*a;
    return s;
}

指针不是很懂
2015-12-11 13:49
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:2 
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{char fun(char a[],int n);
char str[20];
scanf("%s",str);
printf("%s",fun(str,20));//你把20传进去有什么作用吗?没发现
return 0;
}
char fun(char a[],int n)
{
    char str[20];
    int i,j=0,k;
    k=strlen(a);
   
    for(i=0;i<k;i++)
    {
        if(a[i]>'0'&&a[i]<'9')//首先这里就错了,你要的是不属于0-9的字符,那应该是(a[i]<'0'||a[i]>'9')
            str[j]=a[i];
        j++;}//这个j++没有和上一行的str[j]用括号打包起来,他就变成了整个for语句的一个子语句,它的值同i一样
        return str[j]; //其次你这返回不了一个字符串!返回的是字符串中最后一个合法字符

}

最后一点,函数是不能返回字符串的,所有在函数中构造的字符串、数组、等变量在你退出函数的时候都会被释放掉,所以推荐你
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{char fun(char a[],int n);
char str[20];
scanf("%s",str);
fun(str,sizeof(str));
printf("%s",str);
return 0;
}
void fun(char a[],int n)
{
    char str[20];
    int i,j=0,k;
    k=strlen(a);

    for(i=0;i<k;i++)
    {
        if(a[i]<'0'||a[i]>'9'){
            str[j]=a[i];
        j++;}
        }
for( i=0;i<j;i++)a[i]=str[i];
a[i]='\0';//给字符串加上结束符很重要!

}

φ(゜▽゜*)♪
2015-12-11 14:08
tredy6t
Rank: 2
等 级:论坛游民
帖 子:41
专家分:59
注 册:2015-8-6
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    char str[20];
    gets(str);
    puts(str);
    putchar('\n');
    int k=strlen(str);
    for(int i=0;str[i];i++)
        if((int)(str[i]-'0')>=0&&(int)(str[i]-'0')<=9)
            continue;
        else
            printf("%c",str[i]);
    return 0;
}
2015-12-11 16:33
快速回复:我想编一函数可以删去字符串中的字符的,拜托帮我看一看
数据加载中...
 
   



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

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