黑马程序员技术交流社区

标题: 把字符串放到二位数组中 不知道哪里出错了 求指点 [打印本页]

作者: jiangenhao    时间: 2014-4-20 22:53
标题: 把字符串放到二位数组中 不知道哪里出错了 求指点
本帖最后由 jiangenhao 于 2014-4-21 22:22 编辑
  1. 把字符串按单词存放到一个二位数组中 不知道哪里出错了
  2. #include <stdio.h>

  3. #include <string.h>

  4. int main ()
  5. {
  6.     char a[1000] = "welcome to china beijing is the capital of china you isnot a true man if didnot went to changcheng enjoy your journey";
  7.     printf("%s\n",a);
  8.    
  9. //    for(int k = 0,k < 1000,k++)
  10. //    {
  11. //        char b [i][j] = char a [k];
  12. //    }
  13.    
  14.     char b[100][10];
  15.     for(int k = 0;k < 1000;k++)
  16.      {
  17.         for(int i = 0;i<100;i++)
  18.         {
  19.             for(int j =0;j<10;j++)
  20.             {
  21.                
  22.                 if(a[k]==' ')
  23.                 {
  24.                     break;
  25.                 }
  26.                 b[i][j] =  a[k];
  27.             }
  28.             
  29.         }
  30.      }
  31.     for(int i =0;i<100;i++)
  32.     {
  33.         for(int j=0;j<10;j++)
  34.         {
  35.             printf("%c",b[i][j]);
  36.         }
  37.         printf("\n");
  38.     }
  39.    
  40.     return 0;
  41. }
复制代码



作者: 周宇华    时间: 2014-4-20 23:43
你的代码逻辑我实在是没看懂,我就写了一个和你这个类似的。
  1. //把字符串按单词存放到一个二位数组中 不知道哪里出错了
  2. #include <stdio.h>

  3. #include <string.h>

  4. int main ()
  5. {
  6.     char a[1000] = "welcome to china beijing is the capital of china you isnot a true man if didnot went to changcheng enjoy your journey";
  7.     printf("%s\n",a);

  8.     char b[100][20] = {0}; // 10太小,改成20

  9.     // 定义变量保存单词个数
  10.     int count = 0;
  11.    
  12.     // 循环遍历数组a
  13.     for (int k = 0, j = 0; k < 1000; k++) {
  14.         // 如果是空格
  15.         if (a[k] == ' ') {
  16.             // 添加结束符
  17.             b[count][j] = 0;
  18.             // 单词输+1
  19.             count++;
  20.             // 下一个单词从0角标开始保存
  21.             j = 0;
  22.             // 跳过本次循环
  23.             continue;
  24.         }
  25.         // 保存当前字符
  26.         b[count][j] = a[k];
  27.         
  28.         // 字符串结束
  29.         if (a[k] == '\0') {
  30.             // 添加结束符
  31.             b[count][j] = 0;
  32.             // 跳出循环
  33.             break;
  34.         }
  35.         // 角标后移一位
  36.         j++;
  37.     }
  38.    
  39.     // 循环打印每个单词,只打印保存过的
  40.     for(int j=0;j <= count;j++)
  41.     {
  42.         // 打印单词
  43.         printf("%s ",b[j]);
  44.     }
  45.     printf("\n");
  46.    
  47.     return 0;
  48. }
复制代码

作者: 又召    时间: 2014-4-21 00:01
#include <stdio.h>

#include <string.h>

int main ()
{
    char a[1000] = "welcome to china beijing is the capital of china you isnot a true man if didnot went to changcheng enjoy your journey";
    printf("%s\n",a);
   
    //    for(int k = 0,k < 1000,k++)
    //    {
    //        char b [i][j] = char a [k];
    //    }
    int k = 0;
    char b[100][10];
    //for(int k = 0;k < 1000;k++)
    //{
        for(int i = 0;i<100;i++)
        {
            for(int j =0;j<10;j++)
            {
                if(a[k]!='\0')
                {
                    b[i][j] =  a[k];
                    k++;
                }
            }
            
        }
    //}
    for(int i =0;i<100;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(b[i][j]!='\0')
            {
                printf("%c",b[i][j]);
            }
        }
    }
    printf("\n");
    return 0;
}
上面的代码是没有错误的,你可以参考一下,你中间不需要对a数组进行for循环,直接判断字符串是否结束就行了,还有不能用break,这样的话就直接跳出循环了,还没有复制好久跳出了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2