C语言-----数组切割逆序(不用stringcopy)

1.目的:
输入: I’m a student
输出: student a I’m
2.思考
(1)另开一个空间对字符串进行切割存储
(2)开一个二维数组对字符串进行存储
(3)二维数组的行数最多和字符串的字符个数相当

int Inverse(char str[],char str[][N])
{
  int num=;
  int i;
 int j=;
 for(int i=;i<=strlen(str1);i++)//条件判断:当恰好读到str1的\0时,是正好相等,最后一个\0,靠这个条件补上,必须带等号)
 {
   if(str1[i]==' ')
     {
         str2[num][j]='\0';//补充\0以后会被当做字符串进行处理
         num++;//对下一行进行写入
         j=0;//重置j,让j从起始位置开始
     }
     else
     {
     str2[num][j]=str1[i];
     j++;}
     }
   return (num+1);//num从零开始,所以要加一,才是总行数
   }


int main (void)
{
  char str1[N];
   char str2[N][N];
   int len,num;
   int i;
   char note;
   printf("input a sentence:");
   gets(str1);
   num=Inverse(str1,str2);//函数功能:把字符串分割并存储;
   for(i=num-1;i>=0;i--)
   {
     printf("%s",str2[i]);
    }
    return 0;
    }
   //下面要把str2以逆序的方式写入str1中,方案1:遍历一维数组
   void write(int str1[],str2[][N])//
   {
   int hang=num;
   int j=0for(int i=0;i<strlen(str1);i++)
          {
             if(str2[hang][j]=='\0')//读到每一行结束的时候
                 {
                    a[i]=' ';//添加空格
                    hang--;//第二个数组换行
                      j=0;//重置列数
                 }
              else
                 {
                  a[i]=str2[hang][j];//正常读入
                  j++;//向后移位
                 }
           }
           a[i]='\0';
return ;
}
//边界分析:(1)边界条件:读入的是字符串长度减一,最后一个\0是长度最后的位置,不会被读入,直接在为str1\0的位置跳出了循环;(2)for(int i=0;i<=strlen(str1);i++)  当读到最后一位的时候,对应的二维数组是'\0‘,但是此时我们给str1赋值了一个空格,不是'\0',最后还是要另赋值。//(3)最后那个i不要再加一了,最后一次循环有加。(4)要是弄不明白直接加两个’\0',不会影响结果,但是不推荐。


//错误分析:不应该从第一行开始遍历,而是应该从最后一行开始遍历。(已经改正)
   
    
    
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值