鱼C论坛

 找回密码
 立即注册
查看: 3171|回复: 4

C语言字符串问题

[复制链接]
发表于 2012-4-14 11:27:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 湮汐 于 2012-4-14 12:20 编辑

编写一个程序,主函数读取输入10个字符串,或遇到空字符串,由二者中最先满足的那个终止读取过程。
被调用函数功能:所有字符串,按第一个单词的长度从小到大排列输出。

以下是我自己写的程序,可我实在不知道错在那里了。
我的主函数没有错,应该是被调用函数的循环有问题。

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. void word(char (*p)[100],int i);
  4. int main()
  5. {
  6. char a[10][100];
  7. int i = 0;
  8. gets(a[i]);
  9. while(*a[i] && i < 10)
  10. {
  11.   i++;
  12.   gets(a[i]);
  13. }
  14. word(a,i);

  15. }
  16. void word(char (*b)[100],int i)
  17. {
  18. int j,k,l;
  19. int p,q;
  20. int a[10] = {0,1,2,3,4,5,6,7,8,9};
  21. for(j = 0;j < i-1;j++)
  22.   for(k = j+1;k < i;k++)
  23.   {
  24.    for(l = 0;!isspace(b[a[j]][l]) && b[a[j]][l];l++)
  25.     p = l+1;
  26.    for(l = 0;!isspace(b[a[k]][l]) && b[a[k]][l];l++)
  27.     q = l+1;
  28.    if (p > q)
  29.    {
  30.     l = a[j];
  31.     a[j] = a[k];
  32.     a[k] = l;
  33.    }
  34.   }
  35. for(j = 0;j < i;j++)
  36.   puts(b[a[j]]);
  37. putchar('\n');
  38. }
复制代码
我这里借用的思想是冒泡排序,先建立一个数组,并对应再将第一个单词的长度由小到大找出来。而数组a[10]的值,就相当于字符串的下标,然后对数组排序,接着把排序后的数组下标放在新的循环里面,输出字符串。

各位高手帮帮忙,我知道这道题还有不同的解法,但是我主要是想知道我错在哪,为什么调试不出来。谢谢了!
搞的我好几个晚上都没睡好了!

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-14 12:48:48 | 显示全部楼层
本帖最后由 hxs554f 于 2012-4-14 12:56 编辑

#include <stdio.h>
#include <ctype.h>

void word(char (*b)[100],int i);

int main()
{
        char a[10][100];
        int i = 0;
        gets(a[i]);
        while(*a[i] && i < 10)
        {
          i++;
          gets(a);
        }
        word(a,i);      
}

void word(char (*b)[100],int i)
{
        int j,k,l;
        int p,q;
        int a[10] = {0,1,2,3,4,5,6,7,8,9};
[/i][/i][i][i]
        j = 0;
        k = j+1;

        for(j = 0 ; j < (i-1) ; j++)
          //for(k = j+1 ; j < i ; k++)
            for(k = j+1 ; k < i ; k++)
                {         
                        for(l = 0 ; !isspace(b[a[j]][l]) && b[a[j]][l] ; l++)
                                p = l+1;
                        for(l = 0 ; !isspace(b[a[k]][l]) && b[a[k]][l] ; l++)
                                q = l+1;
                        if (p > q)
                        {
                                l = a[j];
                                a[j] = a[k];
                                a[k] = l;
                        }
                        
                }

        for(j = 0 ; j < i ; j++)
          puts(b[a[j]]);

        putchar('\n');
}
[/i][/i]
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-14 12:54:02 | 显示全部楼层
小错误,但程序好像还有问题
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-4-14 13:01:51 | 显示全部楼层
本帖最后由 hxs554f 于 2012-4-14 13:03 编辑

如果某一字符串是以空格开头,判断单词长度时在
for(l = 0 ; !isspace(b[a[j]][l]) && b[a[j]][l] ; l++)
       p = l+1;
for(l = 0 ; !isspace(b[a[k]][l]) && b[a[k]][l] ; l++)
       q = l+1;
这段p或q就为无效值
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-10 12:39:36 | 显示全部楼层
没什么问题,可能编译的时候没有建立好文件吧!
#include <stdio.h>
#include <ctype.h>
void word(char (*p)[100],int i);
int main()
{
char a[10][100];
int i = 0;
gets(a[i]);
while(*a[i] && i < 10)
{
  i++;
  gets(a[i]);
}
word(a,i);

}
void word(char (*b)[100],int i)
{
int j,k,l;
int p,q;
int a[10] = {0,1,2,3,4,5,6,7,8,9};
for(j = 0;j < i-1;j++)
  for(k = j+1;k < i;k++)
  {
   for(l = 0;!isspace(b[a[j]][l]) && b[a[j]][l];l++)
    p = l+1;
   for(l = 0;!isspace(b[a[k]][l]) && b[a[k]][l];l++)
    q = l+1;
   if (p > q)
   {
    l = a[j];
    a[j] = a[k];
    a[k] = l;
   }
  }
for(j = 0;j < i;j++)
  puts(b[a[j]]);
putchar('\n');
}
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-12 18:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表