生煎包小笼包 发表于 2018-12-13 14:26:41

C语言实现藏尾词

藏头词:输入一组英文单词(不超过8个),按输入顺序将每个单词的第一个字母连起来形成一个新单词。用返回字符指针的函数实现。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *change(char *s[],int n);

int main(void) {
    int i,n;
        char poem,*p;
        scanf("%d",&n);        
        for(i=0;i<n;i++){
                scanf("%s",p);
                p=poem;
        }
        printf("%s\n",change(p,n));
        return 0;
}
char *change(char *s[],int n){
        int i;
   char *t = (char *)malloc(9 * sizeof(char));
   for(i = 0; i < n; i++)
   t[ i ] = s;
   t = '\0';
        return t;
}

生煎包小笼包 发表于 2018-12-13 14:32:42

4
although zero ship phone
请按任意键继续. . .


这是我输入的示例,但是无法输出,搞不懂问题在哪里
还有就是这句动态内存分配的代码不是很懂,懂的人可以解释一下吗,非常谢谢你的帮助char *t = (char *)malloc(9 * sizeof(char));
谢谢

生煎包小笼包 发表于 2018-12-13 14:37:37

4
although zero ship phone
请按任意键继续. . .


输入可以,输出不了
char *t = (char *)malloc(9 * sizeof(char));这句动态内存什么意思啊,书上看不懂{:5_104:}
有谁能帮我解答一下,万分感谢

ba21 发表于 2018-12-13 15:09:19

生煎包小笼包 发表于 2018-12-13 14:37
4
although zero ship phone
请按任意键继续. . .


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *change(char s[],int n);

int main(void)
{
    int i,n;
    char poem;

    scanf("%d",&n);

    for(i=0;i<n;i++)
        {
                scanf("%s",poem); // 输入的数据存入2维数组中
    }

        printf("%s\n",change(poem,n));// change 取2维数组每行第1列的字符

        return 0;
}
char *change(char s[],int n)
{
   int i;

   char *t = (char *)malloc(9 * sizeof(char)); // 动态分配9个字符的空间,用来存取出来的字符。要求是8个,最后必须有个"\0"结束标志。所以是9

   for(i = 0; i < n; i++)
   {
                t = s; //取2维数组每行第1列的字符 存入 t
   }

        t = '\0'; // 结束标志
   

        return t;
}

生煎包小笼包 发表于 2018-12-13 15:23:27

ba21 发表于 2018-12-13 15:09


啊啊啊谢谢你我去研究一下看看

生煎包小笼包 发表于 2018-12-13 16:01:22

生煎包小笼包 发表于 2018-12-13 15:23
啊啊啊谢谢你我去研究一下看看

如果取每行数组最后一个元素该怎么改

ba21 发表于 2018-12-13 18:39:43

本帖最后由 ba21 于 2018-12-13 18:41 编辑

生煎包小笼包 发表于 2018-12-13 16:01
如果取每行数组最后一个元素该怎么改

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *change(char s[],int n);

int main(void)
{
    int i,n;
    char poem={'\0'};

    scanf("%d",&n);

    for(i=0;i<n;i++)
        {
                scanf("%s",poem); // 输入的数据存入2维数组中
    }

        printf("%s\n",change(poem,n));// change 取2维数组每行第1列的字符

        return 0;
}
char *change(char s[],int n)
{
   int i, j;

   char *t = (char *)malloc(9 * sizeof(char)); // 动态分配9个字符的空间,用来存取出来的字符。要求是8个,最后必须有个"\0"结束标志。所以是9

   for(i = 0; i < n; i++)
   {
           j = 0;
           while(s!='\0') continue; // 找到最后, 这里 j 到了 '\0' 后面

           t = s; //所以这里j-2 就是最后一个可用字符
          
   }

        t = '\0'; // 结束标志
   

        return t;
}



也可, 意思一样。
           j = 0;
           while(s[++j]!='\0') continue;

           t = s[--j];

生煎包小笼包 发表于 2018-12-13 21:09:43

ba21 发表于 2018-12-13 18:39
也可, 意思一样。

万分感谢{:5_110:}

ba21 发表于 2018-12-13 21:23:20

生煎包小笼包 发表于 2018-12-13 21:09
万分感谢

结下贴,谢谢
页: [1]
查看完整版本: C语言实现藏尾词