我最近得到了一个用C编写代码的作业,该代码确定单词列表是否已排序(“排序”=所有单词都按字母中字母的升序排列) 我们必须遵循许多指导原则,因此最终结果是彻头彻尾的愚蠢,而不是简短而有效的代码。
我的代码出现了2次错误:
“传递'sortedsentance'的参数1使得整数的指针没有强制转换”
预期'char *'但参数类型为'char'
这是我的代码 -
#include <stdio.h>
int sortedSentance(char *str)
{
int i;
for (i=1; str[i]!='0'; i++)
{
if ((str[i]>str[i-1])||(str[i]==33))
continue;
else
break;
}
if (str[i]=='\0')
return 1;
else
return 0;
}
int main()
{
int num=0, val=0;
char str1;
printf("Please enter the number of strings of length 5 (maximum 5)\n");
scanf("%d", &num);
printf("Please enter %d strings\n", num);
scanf("%s", &str1);
val= (sortedSentance(str1));
if (val==1)
printf("the string %s, is sorted.", str1);
else
printf("the string %s, is not sorted.", str1);
return 0;
}
注意:
num
没有做任何事情,但是再次,为了愚蠢的准则。即使没有实际接收到预先确定的单词数,该算法也能实现所需的功能。任何帮助都会非常感激,我已经抓住了我的头发试图理解为什么这个非常简单的代码不起作用,以及我可以做了什么样的愚蠢错误。
答案 0 :(得分:0)
问题在于您的
char str1;
您尝试使用单个char,但在您的函数中它接受指向char数组的指针。这是你有两个选择的问题。
char str1 [100]; //这100可以根据您的需要进行更改
2
char * str1 = new char[100];//This 100 could be changed according to your needs
在第二种情况下,要么会工作并记得在str1上调用delete []运算符。
此外,我没有看过你的程序的逻辑正确性。刚解决了编译错误。
P.S。 由于解决方案需要在C中,
你可以使用
char * str1 = malloc(sizeof(char)*(100));
答案 1 :(得分:0)
您应该选择以下内容来代替char str1;
作为单个字符的持有者,而不是为字符串分配内存,您可以选择:
静态内存分配:char str1[100];
动态内存分配:char *str1 = (char*) malloc(sizeof(char) * 100);
P.S。您不必传递给scanf字符串的地址,因为str1
是一个地址本身所以写scanf("%s", str1);
而不是scanf("%s", &str1);