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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何判断字符串中一个字符是不是符合要求!相关的知识,希望对你有一定的参考价值。

编写一个程序,输入一个字符串并对它编辑,功能有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");


惨不忍睹,将就改一下,勉强可以运行
#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");



参考技术A 先让我看看 直播中
首先,不要用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

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

本回答被提问者采纳
参考技术B 回答

亲,你好,很高兴回答你的问题,字符串常量是由一对双引号括起来的一个字符序列。如“hello”,“12354”“ 无论双引号内是否包含字符,包含多少个字符,都代表一个字符串常量 为便于确定字符串的长度,C编译器会自动在字符串的末尾添加一个ASCLL码值为0的空操作符‘\\0’作为字符串结束的标志,在字符串中可以不显示地写出 字符串:实际就是由若干有效字符构成且以字符‘\\0’作为结束的一个字符序列 字符串的储存 C语言中没有提供字符串数据类型,因此字符串的存取要用字符型数组来实现判断存入字符型数组的是否是一个字符串需要通过观察其结尾是否有‘\\0’来判断字符串结束标志‘\\0’也占一个字节的内存,但他不计入字符串的实际长度,只计入数组的长度 字符串赋值时可以直接声明数组长度,也可以不声明数组长度 当声明了数组长度时,不需要需要使输入的数组最后一位是‘\\0’,系统会自动补’\\0’没有声明数组长度,必须人为地在数组初始化列表中添加’\\0’ char str[6] = \'H\',\'e\',\'l\',\'l\',\'o\',\'\\0\';char str2[6] = \'H\',\'e\',\'l\',\'l\',\'o\';char str3[] = \'H\',\'e\',\'l\',\'l\',\'o\',\'\\0\'

提问

这题谢谢

还在吗?可以帮我解出来吗?

回答

int flag=0;if((year%4==0 && year%100!=0) || (year%400==100))flag = 1;else flag =0;int a=0;switch(month-1)case 11 :a+=30;case 10 :a+=31;case 9 :a+=30;case 8 :a+=31;case 7 :a+=31;case 6 :a+=30;case 5 :a+=31;case 4 :a+=30;case 3 :a+=31;case 2 :a+=28+flag;case 1 :a+=31;break;default :printf("Please input others\\n");

亲,你好,希望我的回答对你有帮助哦~

参考技术C 楼上差不多都说了,简单的一句话就是变量的作用域。深究就是基本功不扎实。
这种问题你如果真的”确信“就是”D",但是却return -1;
你为什么不在函数里面吧你所谓的“D"打印出来看看?经常所谓的认为,是错的。

C语言定义一个函数,判断字符串中是不是包含另一个子串!!!!!!急

C语言定义一个函数,判断字符串中是否包含另一个子串!!!!!!急C语言的,帮忙写。给奖励很多

调用strstr()函数就可以实现

#include <string.h>
#include <stdio.h>

int main()

char s[]="12345678";
char s1[]="135";
char s2[]="567";

if ( strstr(s,s1) )

printf("ok\\n");

else

printf("no\\n");

//--以上显示no
if ( strstr(s,s2) )

printf("ok\\n");

else

printf("no\\n");

//--以上显示ok
return 0;

追问

能自己输入么

追答#include <string.h>
#include <stdio.h>
 
int main()

    char s[100];
    char s1[100];
 
     printf("input s:");
     gets(s);
     printf("input s1:");
     gets(s1);
    if ( strstr(s,s1) )
    
        printf("ok\\n");
    
    else
    
        printf("no\\n");
    
    return 0;

追问

谢谢

参考技术A #include <stdio.h>
char *mystrstr(char *s1,char *s2);
int main(void)

char s1[]="123456789",s2[]="123";
if(mystrstr(s1,s2)!=NULL)

puts("YES");

else

puts("NO");

return 0;

char *mystrstr(char *s1,char *s2)

char *p,*q;
for(;*s1;s1++)

if(*s1==*s2)

for(p=s1,q=s2;*q&&*p==*q;p++,q++);
if(!*q)

return s1;



return NULL;

追问

用scanf自己输入的

以上是关于C语言如何判断字符串中一个字符是不是符合要求!的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何判断整数是不是为平方数

用c语言实现字符串的回文,有要求如下:

键盘输入一个字符,要求判断是不是为数字字符

C语言 判断回文字符串

C语言如何判断一个字符串是不是为null

c语言中如何判断输入的是不是数字?