标题:定义整型变量出了点问题,deleteChar函数中四个整型变量报错
只看楼主
lindawei
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-8-15
结帖率:100%
已结贴  问题点数:18 回复次数:9 
定义整型变量出了点问题,deleteChar函数中四个整型变量报错
删除一个字符串中的指定字母,deleteChar函数中四个整型变量报错,求解
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *deleteChar(char *str,char *Delete)
{
    int hash[256];
    if(Delete==NULL)        
        return str;
    int i,j,k;                 
    for(i=0;i<256;i++)                //给hash数组赋初值
        hash[i]=0;
    for(j=0;j<strlen(Delete);j++)    //将要删除的字符对应的ASCII码对应的数组赋值1
        hash[Delete[j]]=1;
    int count;
    for(k=0;k<strlen(str);k++)        //查找目标字符串,并删除
        if(hash[str[k]]==0)
        {
            str[count]=str[k];
            count++;
        }
    str[count]='\0';
    return str;
}
int main()
{
    char *str,*Delete;
    printf("输入目标字符串:\n");
    scanf("%s",str);        //输入目标字符
    printf("输入要删除的字符:\n");
    scanf("%s",Delete);        //输入要删除的字符    
    deleteChar(str,Delete);
    printf("结果为:");
    printf("%s",str);
}

搜索更多相关主题的帖子: 整型 变量 删除 Delete str 
2018-08-18 16:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
//int count;
int count=0;
2018-08-18 16:55
lindawei
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-8-15
得分:0 
回复 2楼 吹水佬
大佬帮忙看下我定义的ijk为什么报错了
2018-08-18 17:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
还有:
//char *str,*Delete;
char str[256],Delete[256]; //要足够大
2018-08-18 17:41
masterl
Rank: 2
等 级:论坛游民
威 望:1
帖 子:16
专家分:31
注 册:2017-10-12
得分:3 
#define _CRT_SECURE_NO_WARNINGS     //保证数据安全的头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *deleteChar(char *str, char *Delete)
{
    int hash[256];
    if (Delete == NULL)
        return str;
    int i, j, k;
    for (i = 0; i<256; i++)                //给hash数组赋初值
        hash[i] = 0;
    for (j = 0; j<strlen(Delete); j++)    //将要删除的字符对应的ASCII码对应的数组赋值1
        hash[Delete[j]] = 1;
    int count=0;
    for (k = 0; k<strlen(str); k++)        //查找目标字符串,并删除
    if (hash[str[k]] == 0)
    {
        str[count] = str[k];
        count++;
    }
    str[count] = '\0';
    return str;
}
int main()
{
    char *str, *Delete;
    str = (char *)malloc(100);
    Delete = (char *)malloc(100);
    printf("输入目标字符串:\n");
    scanf("%s", str);        //输入目标字符
    printf("输入要删除的字符:\n");
    scanf("%s", Delete);        //输入要删除的字符   
    deleteChar(str, Delete);
    printf("结果为:");
    printf("%s", str);

    system("pause");
}
2018-08-18 17:56
masterl
Rank: 2
等 级:论坛游民
威 望:1
帖 子:16
专家分:31
注 册:2017-10-12
得分:3 
定义的指针要初始化分配内存大小,count要初始化为0.
2018-08-18 17:58
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:9 
C不是C++,
int i,j,k;
必须放在函数或复合语句的开头部分。
也就是说变量声明结束以后才能有其他语句。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2018-08-18 18:07
lindawei
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-8-15
得分:0 
回复 7楼 forever74
嗯嗯,已解决
2018-08-18 19:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 8楼 lindawei
VC不支持现在的C语言
如果你换个正常的C编译器(比如mingw-w64、比如clang)就可以编译通过了。
2018-08-20 08:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
顺手把你这个帖子也回了
主要记住一点,char既不是signed char,也不是unsigned char,C标准未规定它是无符号类型还是具符号类型。
如果char在你的编译器实现中是具符号类型,又是负值,那么hash[i]就越界了。

程序代码:
#include <stdio.h>

char* deletechars( char* str, const char* cs )
{
    _Bool map[256] = { 0 };
    for( ; *cs; ++cs )
        map[(unsigned char)*cs] = 1;

    char* dst = str;
    for( char* p=str; *p; ++p )
        if( !map[(unsigned char)*p] )
            *dst++ = *p;
    *dst = '\0';
    return str;
}

int main( void )
{
    char s[] = "abcdefg_abcdefg";
    const char* c = "adg";
    puts( deletechars(s,c) );
}


2018-08-20 12:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489301-1-1.html




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

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