兄弟们姐妹们啊,就这一个小问题,当局者迷了,大家帮看看
本帖最后由 kjj2931 于 2022-2-12 19:55 编辑void compare(char *c[],int n);
#include <stdio.h>
#include <string.h>
int main()
{
int q = 0;
char *c[] = {"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
printf("这是按照要求排序后的字符串!\n\n");
printf("%s\n\n",c);//如果要输出一个字符串,使用%s,那么后面只能是地址c
printf("%c\n",*c);//如果需要输出字符,那么需要加个星号,指向它输出!
for(q = 0;q<5;q++)
{
compare(c+q,q);
printf("%s",*(c+q));
}
}
void compare(char *c[],int n)
{
int i = 0,j = 0;
int max;
int sum = 0;
if(*c>=65&&(*c+1)>=97)
{
sum = strlen(c);
*c = *c + 32;
for(i = 0;i<sum;i++)
{
if(*c==' ')
{
continue;
}
for(j = 1;j<sum;j++)
{
if(*c == ' ')
{
continue;
}
else if(*c>*c)
{
max = *c;
*c = *c;
*c = max;
}
}
}
}
else
{
sum = strlen(c);
for(i = 0;i<sum;i++)
{
for(j = 1;j<sum;j++)
{
if(*c>*c)
{
max = *c;
*c = *c;
*c = max;
}
}
}
}
}
出错位置一直在第13行,一编译就显示 passing argument 1 of 'compare' from incompatible pointer type 还有expected 'char **' but argument is of type 'char *' 真的迷在其中了,感觉很简单,就是找不出为啥一直提示那里错了 {:10_266:}麻了 本帖最后由 jhq999 于 2022-2-12 20:04 编辑
字符串常量不允许修改
void compare(char *c[],int n);
#include <stdio.h>
#include <string.h>
int main()
{
int q = 0;
char *c[] = {"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};/////////////////////////这里面都是字符串常量
printf("这是按照要求排序后的字符串!\n\n");
printf("%s\n\n",c);//如果要输出一个字符串,使用%s,那么后面只能是地址c
printf("%c\n",*c);//如果需要输出字符,那么需要加个星号,指向它输出!
for(q = 0;q<5;q++)
{
compare(c+q,q);
printf("%s",*(c+q));
}
}
void compare(char *c[],int n)
{
int i = 0,j = 0;
int max;
int sum = 0;
if(*c>=65&&(*c+1)>=97)
{
sum = strlen(c);
*c = *c + 32;
for(i = 0;i<sum;i++)
{
if(*c==' ')
{
continue;
}
for(j = 1;j<sum;j++)
{
if(*c == ' ')
{
continue;
}
else if(*c>*c)
{
max = *c;
*c = *c;
*c = max;
}
}
}
}
else
{
sum = strlen(c);
for(i = 0;i<sum;i++)
{
for(j = 1;j<sum;j++)
{
if(*c>*c)
{
max = *c;
*c = *c;///////////////////字符串常量不可改变
*c = max;
}
}
}
}
}
本帖最后由 傻眼貓咪 于 2022-2-13 15:13 编辑
不知道是不是你要的:#include <stdio.h>
#include <ctype.h>
void change(char[], size_t);
void swap(char*, char*);
int main() {
char str[] = { "Follow me","BASIC","Great Wall","FORTRAN","Computer design" }; // <----- 注意这里 -----
size_t
N = sizeof(str) / sizeof(char), // 数组长度
n; // 字符串长度
for (int i = 0; i < (int)N; i++) {
n = sizeof(str) / sizeof(char); // 字符串长度
printf("%s -> ", str);
change(*(str + i), n); // 改变字符串字符循序
printf("%s\n", str);
}
return 0;
}
/* 改变字符串字符循序 */
void change(char str[], size_t n) {
char a, b;
for (size_t i = 0; i < n - 1; i++) {
if (isalpha(str)) {
if (str >= 'A' && str <= 'Z') a = str + ('a' - 'A');
else a = str;
}
else continue;
for (size_t j = i + 1; j < n; j++) {
if (isalpha(str)) {
if (str >= 'A' && str <= 'Z') b = str + ('a' - 'A');
else b = str;
if (a > b) swap(&(str), &(str));
}
else continue;
}
}
}
/* 字符交换位置 */
void swap(char* p, char* q) {
char c = *p;
*p = *q;
*q = c;
}Follow me -> eFmllo ow
BASIC -> ABCIS
Great Wall -> allae GrtW
FORTRAN -> ANFORRT
Computer design -> Cngiedes morptu 傻眼貓咪 发表于 2022-2-13 15:05
不知道是不是你要的:
谢谢你的帮助,不过,我的意思是不管是大小写字母,都安照26个英文字母顺序来排列。虽然没有符合预期,但是还是很谢谢你,我也发现了我的很多错误。{:10_256:} jhq999 发表于 2022-2-12 20:02
字符串常量不允许修改
并没有实际解决问题,而且我也明白了直接差的还有一大截,不过我知道了自己那些地方还应该再看看书,谢谢
页:
[1]