C语言如何判断字符串中一个字符是否符合要求!

编写一个程序,输入一个字符串并对它编辑,功能有D功能,输入格式为D要删除的字符我想让他输入后判断是不是D功能于是我写了个WhichFunc函数但是一直返回-1,但是fun... 编写一个程序,输入一个字符串并对它编辑,功能有D功能,输入格式为D 要删除的字符
我想让他输入后判断是不是D功能于是我写了个WhichFunc函数
但是一直返回-1,但是func[0]实际上的确是D这个字符,我不知道哪里出问题了求帮忙看一下
还有就是看一下我的D功能有木有写错。。。刚接触字符串。。。
好的会加分!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char in[40];
char func[999]="";
int WhichFunc() //不符合返回-1
//D功能返回0
{
if(*(func+0)=='D'){return 0;}
else return -1;
}

char *D(char DWhat)
{
int i;
for(i=0;i<= strlen(in);i++)
{
if(in[i]==DWhat)
{
in[i]==' ';
return in;
break;
}
}
printf("No Answer!\n");
}

int main()
{
char in[40];
char func[999];
printf("请输入一个字符串\n");
gets(in);
if(in[strlen(in)-1]!='.'){printf("[ERROR]结尾未找到句号!\n");system("PAUSE");return 0;}
else
{
printf("请选择编辑功能:\nD:删除一个字符,命令的方式为:D a 其中a为被删除的字符\nI:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。\nR:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1,则应全部替换 \n");
gets(func);
//printf("%c",func[0]);
if(WhichFunc()== -1) {printf("未找到功能!\n");system("PAUSE");system("EXIT");}
else if(WhichFunc()== 0) {printf("%s \n",D(func[2]));system("PAUSE");system("EXIT");}
}

}
展开
 我来答
带着光圈的小鸡
2014-06-28 · 超过31用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:50.6万
展开全部
惨不忍睹,将就改一下,勉强可以运行
#include <stdio.h>
#include <string.h>

#include <stdlib.h>
char in[40]; //定义全局变量
char func[999]=""; //定义全局变量
int WhichFunc() //不符合返回-1
//D功能返回0
{
if(func[0]=='D')
return 0;
else return -1;
}

char *D(char DWhat)
{
int i;
for(i=0;i<= strlen(in);i++)
{
if(in[i]==DWhat)
{
in[i]=' '; //赋值用=,==是逻辑运算符
return in;
break;
}
}
printf("No Answer!\n");
}

int main()
{
//char in[40]; //重复定义,将你前面定义的全局变量作用域减少了一块
//char func[999]; //等于两个不同的变量,你想用全局变量来传递数值的目的泡汤了
printf("请输入一个字符串\n");
gets(in);
if(in[strlen(in)-1]!='.')
{
printf("[ERROR]结尾未找到句号!\n");
system("PAUSE");
return 0;
}
else
{
printf("请选择编辑功能:\nD:删除一个字符,命令的方式为:D a 其中a为被删除的字符\nI:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。\nR:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1,则应全部替换 \n");
gets(func);
//printf("%c",func[0]);
if(WhichFunc()== -1)
{
printf("未找到功能!\n");
system("PAUSE");
system("EXIT");
}
else if(WhichFunc()== 0)
{
printf("%s \n",D(func[2]));
system("PAUSE");
system("EXIT");
}
}

}
遗忘录音
推荐于2017-11-26
知道答主
回答量:10
采纳率:0%
帮助的人:5.6万
展开全部
先让我看看 直播中
首先,不要用gets,这函数很坑爹。
C的字符串真是太那啥了,不妨用用c++的string。
然后,在输入部分,不要用gets,改用scanf,用char会好调试的多。
为什么你要在WhichFunc()中用指针……我要上编译器调试一下。
好的,我知道了,这是编译器中的结果:
*(func+0)=0 '\000' >>不出错才怪
让我看看怎么改
追问
...刚接触字符串,麻烦你帮我看一下QAQ谢谢!
追答

好奇怪,貌似发生了数据的丢失

在main函数中,func中的’D‘的数据还在,而在WhichFunc中就不见了

不只是指针的问题,不过那指针也是错的

我明白了:

不是你的函数的问题,这程序一开始都是错的

再说一遍,这程序一开始都是错的。

这是基本功的问题,你在全局与main中定义了两次func(注意不是声明)

在C的语法中,小作用域中的定义的优先级大于大作用域的定义。

在你的程序中,gets的对象是main中的func,而在whichfunc中调用的却是全局的func

这就是whichfunc出错的原因

但是你这程序真的有点惨不忍睹,瑕疵太多了

int main()
{
int i;
printf("input a string\n");
scanf("%s",in);
printf("choose: \nD:delete a char,like D A(a char)\n"); 
scanf("%c",&func);
if(func=='D') { /* do someting*/ }
return 0 
}

打回重写的代码


你的D函数有着非常不良好的兼容性(尽管应该没有什么错误)。

怎么可以把一个字符直接赋成空格……?!你怎么输出?

这样的函数让一个O(1)的输出变成了O(n)

在你其他功能的要求下,再考虑鲁棒性和易读性,建议使用C++中的STL:list

也就是链表,也可以自己写一个

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月下忆娇娘
2014-06-28 · TA获得超过326个赞
知道小有建树答主
回答量:442
采纳率:100%
帮助的人:354万
展开全部
楼上差不多都说了,简单的一句话就是变量的作用域。深究就是基本功不扎实。
这种问题你如果真的”确信“就是”D",但是却return -1;
你为什么不在函数里面吧你所谓的“D"打印出来看看?经常所谓的认为,是错的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式