私は以前、文字列を入力として受け取り、それが有効かどうかをチェックするプログラムを Java で作成していました。決定のルールは次のとおりです。
1) 文字列は、「pi」、「ka」、「chu」という単語が断片として含まれ、任意の順序で何度でも繰り返される場合にのみ認識可能です。
2) 他のフラグメント (またはサブシーケンス) が含まれている場合は、認識できません。
Javaは文字列関数のサポートが優れているため、Javaで少し簡単に行うことができました。私のコードは(これは正常に動作します)
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");
}
}
}
ただし、対応するプログラムを c で (ポインターを使用して) 書いていると、コードが無限ループに陥ります。私のコードをチェックして、エラーがどこにあるかを指摘してください。また、ポインタを使わずにこのプログラムを実装することは可能ですか??
#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;
}
私は非常にばかげた間違いのいくつかを修正しました。人々が気にしないことを願っています