Java 使用指针验证字符串是否仅由有限的子字符串集组成
我之前用java编写了一个程序,它接收一个字符串作为输入,并检查它是否有效。决定的规则是: 1) 当且仅当字符串包含单词“pi”、“ka”、“chu”作为其片段时,该字符串才是可识别的,其顺序可以重复任意次数Java 使用指针验证字符串是否仅由有限的子字符串集组成,java,c,Java,C,我之前用java编写了一个程序,它接收一个字符串作为输入,并检查它是否有效。决定的规则是: 1) 当且仅当字符串包含单词“pi”、“ka”、“chu”作为其片段时,该字符串才是可识别的,其顺序可以重复任意次数 2) 如果它包含任何其他片段(或子序列),则无法识别 我可以用java轻松地完成这项工作,因为java对字符串函数有更好的支持。我的代码是(这个很好用) 然而,当我用c编写相应的程序(使用指针)时,我的代码会运行到无限循环中。请检查我的代码并指出错误是否存在也可以在不使用指针的情况
2) 如果它包含任何其他片段(或子序列),则无法识别
我可以用java轻松地完成这项工作,因为java对字符串函数有更好的支持。我的代码是(这个很好用)
然而,当我用c编写相应的程序(使用指针)时,我的代码会运行到无限循环中。请检查我的代码并指出错误是否存在也可以在不使用指针的情况下执行此程序吗??
#包括
#包括
#包括
内部主(空)
{
char-str[10];
int len=0,flag=1;
char*ptr;
printf(“输入字符串:”);
获取(str);
len=strlen(str);
ptr=str;
而(*ptr!='\0')
{
如果(!strcmp(“pi”,ptr))
{
ptr=ptr+2;
}
否则,如果(!strcmp(“ka”,ptr))
{
ptr=ptr+2;
}
否则,如果(!strcmp(“chu”,ptr))
{
ptr=ptr+3;
}
其他的
{
printf(“未识别字符串”);
flag=0;
打破
}
}
如果(标志==1)
printf(“识别字符串”);
返回0;
}
我已经纠正了一些非常愚蠢的错误。希望大家不要介意您可能希望通过
ptr+=2
或ptr+=3
来提升指针,而不是更改指针指向的字符:*ptr=…
循环中的逻辑也不正确。通过while(*ptr!='\0')
循环,直到指针的当前位置指向0(NUL字符-C中的字符串终止符)。您似乎错过了上一个else
块中的中断
gets(str)
也有问题,这可能会导致C语言中的缓冲区溢出问题。除了安全问题,如果您输入的字符串长度超过9个字符,您的程序将异常运行
您的C代码可能还有其他一些问题,我不能仅仅通过查看您的代码就列出这些问题
编辑
另一个问题是您使用了strcmp,它将指针指向的所有内容与片段进行比较。i、 e.如果输入是“pikachu”,它会将“pi”与“pikachu”进行比较,发现“pi”在词汇上小于“pikachu”,并表明该字符串无法识别。您可能需要strncmp
,在其中可以指定要比较的字符数。您可能希望将指针向前推进ptr+=2
或ptr+=3
,而不是更改指针指向的字符:*ptr=…
循环中的逻辑也不正确。通过while(*ptr!='\0')
循环,直到指针的当前位置指向0(NUL字符-C中的字符串终止符)。您似乎错过了上一个else
块中的中断
gets(str)
也有问题,这可能会导致C语言中的缓冲区溢出问题。除了安全问题,如果您输入的字符串长度超过9个字符,您的程序将异常运行
您的C代码可能还有其他一些问题,我不能仅仅通过查看您的代码就列出这些问题
编辑
另一个问题是您使用了strcmp,它将指针指向的所有内容与片段进行比较。i、 e.如果输入是“pikachu”,它会将“pi”与“pikachu”进行比较,发现“pi”在词汇上小于“pikachu”,并表明该字符串无法识别。您可能需要strncmp
,在其中可以指定要比较的字符数。哦,是的!!我的错误,但即使纠正后,它运行到无限循环哦,是的!!我的错误,但即使纠正后,它会陷入无限循环好吧!!我又犯了一个愚蠢的指针错误。。但即使在那之后,程序运行到无限循环是的!!我得到了它!!谢谢你,好的!!我又犯了一个愚蠢的指针错误。。但即使在那之后,程序运行到无限循环是的!!我得到了它!!谢谢
import java.util.Scanner;
public class RecognisingWords {
public static void main(String[] args) throws Exception
{
Scanner inp= new Scanner(System.in);
String str;
System.out.println("Enter the string to be tested:");
str=inp.nextLine();
while(str.length()>0)
{
if(str.startsWith("pi"))
{
str= str.substring(2);
}
else if(str.startsWith("ka"))
{
str= str.substring(2);
}
else if(str.startsWith("chu"))
{
str= str.substring(3);
}
else
{
System.out.println("Unrecognisable Sequence");
break;
}
}
if(str.length()==0)
{
System.out.println("Recognisable Sequence");
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main(void)
{
char str[10];
int len=0,flag=1;
char *ptr;
printf("Enter the string : ");
gets(str);
len=strlen(str);
ptr=str;
while(*ptr!='\0')
{
if(!strcmp("pi",ptr))
{
ptr=ptr+2;
}
else if(!strcmp("ka",ptr))
{
ptr=ptr+2;
}
else if(!strcmp("chu",ptr))
{
ptr=ptr+3;
}
else
{
printf("String not recognised");
flag=0;
break;
}
}
if(flag==1)
printf("String is recognised");
return 0;
}