我获得了以下任务:
编写一个以字符串作为输入并打印时间最长的程序 字符串的前缀,其反向是字符串的有效后缀。 例如,如果给出“notation”作为输入,则前缀“no”是 最长的前缀,在该位置具有匹配的有效后缀(即“on”) 端。
如果字符串是回文(即如果字符串与其相同) 反转),然后前缀是整个字符串本身。例如,如果 输入是“思域”,那么最长的前缀本身就是“思域”。如果 string没有有效的前缀,打印0.例如,如果是输入字符串 是“鸟”,第一个角色本身就存在不匹配 没有有效的前缀。
字符串中的符号仅来自集合{A-Z,a-z}。该 符号区分大小写。即'A'和'a'被认为是 不同。您将获得一个名为printChars()的函数 从指向的起始位置打印一个字符数组 p到q指向的结束位置。如果p为NULL,则输出0。
该功能的原型是:
void printChars(char *p, char *q);
您不必为printChars()函数编写程序。这个 函数会自动添加到代码段的末尾 你写的。
如果您愿意,可以在库中使用字符串函数。
INPUT:输入是一个长度为N的字符串,仅由符号组成 设置{A-Za,z}。
OUTPUT:具有相应匹配后缀的最长前缀 如果不存在这样的前缀,则为0。
约束:输入将满足以下属性。它是 没有必要验证输入。
1·; = N< = 99
我已编写代码但编译失败。可能导致问题的原因是什么?如何解决?
#include<stdio.h>
#include<string.h>
void printChars(char *p,char *q);
int main()
{
char a[99];
int n;
scanf("%s",a);
char *p=null,*q=null,*x;
p=&a[0];
q=&a[0];
n=strlen(a);
x=&a[0]+(n-1);
for(int i=0;i<=(n-1);i++)
{
if(*x==*q)
{
x--;
q++;
}
else
{
q--;
break;
}
}
x=&a[0]+(n-1);
if(*p!=*x)
printf("0");
printchars(p,q);
return 0;
}
void printChars(char *p, char *q)
{
if (p==NULL){
printf("0");
}
else{
while(p <= q){
printf("%c",*p);
p++;
}
}
仍然出错
Program:52:1: warning: data definition has no type or storage class [enabled by default]
Program:52:1: warning: type defaults to 'int' in declaration of 'printChars' [enabled by default]
Program:52:1: warning: parameter names (without types) in function declaration [enabled by default]
Program:52:1: error: conflicting types for 'printChars'
Program:34:6: note: previous definition of 'printChars' was here
Program:54:1: error: expected identifier or '(' before 'return'
Program:56:1: error: expected identifier or '(' before '}' token
Program:59:6: error: redefinition of 'printChars'
Program:34:6: note: previous definition of 'printChars' was here
答案 0 :(得分:2)
在C.中没有名为null
的预定义宏
改变
char *p=null,*q=null,*x;
到
char *p = NULL, *q = NULL, *x;
更改功能调用
printchars(p,q);
^ This 'c' should be in capital
到
printChars(p,q);
你还错过了}
函数的右括号printChars
然后最后运行代码:http://ideone.com/SczMu2
答案 1 :(得分:1)
试试此代码
#include<stdio.h>
#include<string.h>
void printChars(char *p,char *q);//function prototype
int main()
{
int i,n,k=0,j;
char a[100];
char b[100];
char *p;
char *q;
printf("enter array of chars");
scanf("%s",a);
n=strlen(a);
j=n;
for(i=0;i<n;i++)
{
b[j-1]=a[i];
j--;
}
for(i=0;i<n;i++)
{
if(a[i]==b[i])
{k++;
p=a;}
//printf("%c",a[i]);
else if(a[i]!=b[i]&&k==0){
p=NULL;break;}
else break;
}
//p=a;
q=&a[k-1];
printChars(p,q);
return 0;
}//end of main
void printChars(char *p, char *q)
{
if (p==NULL){
printf("0");
}
else{
while(p <= q){
printf("%c",*p);
p++;
}
}
}
答案 2 :(得分:0)
大约一年前,我接近了类似的任务。
看看这个功能。它返回从单词中打印的字符数。
int palindromeWordIndex(char *str)
{
int indexLeft = 0, indexRight = strlen(str)-1;
while (indexLeft <= indexRight)
{
if (str[indexLeft] == str[indexRight]){
indexLeft++;
indexRight--;
}
else
return indexLeft;
}
return strlen(str);
}
我从我自己的函数中重新编写了它,只检查一个单词是否是回文。
int isPalindromeIter(char *str){
int indexLeft = 0, indexRight = strlen(str)-1;
while (indexLeft <= indexRight){
if (str[indexLeft] == str[indexRight]){
indexLeft++;
indexRight--;
}
else
return 0;
}
return 1;
}