鱼C论坛

 找回密码
 立即注册
查看: 1036|回复: 5

[已解决]大佬们 小白求教 把字符串分割成二维数组疑问,

[复制链接]
发表于 2020-3-4 13:13:39 | 显示全部楼层 |阅读模式

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

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

x
照视频打的代码 把一个字符串  char* p = "abcdef,acccd,eeee,aaaa,e3eeeee,sssss,"; 然后以逗号‘,’为分隔
组成一个个二维数组  比如abcdef是二维数组第一个元素,acccd是二维数组第二个元素
这个应该怎么写?我照视频打的  p2[count][p1 - p2] = '\0'; 报错 说是指针类型

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int getMen(char* from, char c, char myBuf[10][30], int* ncount)
{
        if (from == NULL || ncount == NULL)
        {
                return -1;
        }
        char* myfrom = from;
        int count = 0;
        char* p1 = myfrom;
        char* p2 = myfrom;
       
        while (*myfrom)
        {
                p1 = strchar(p1, c);
                if (p1 != NULL)
                {
                        if (p1 - p2 > 0)
                        {
                                strncpy(p2[count], p1, p1 - p2);
                                p2[count][p1 - p2] = '\0';  //这里p1 - p2 报错
                                count++;
                                p1 = p2 = p1 + 1;
                        }
                }
                else
                {
                        break;
                }
        }
        *ncount = count;
        return 0;
}

int main()
{
        int ret = 0;
        char* p = "abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";
        char c = ',';
        int count = 0;
        char buf2[10][30];
        ret = getMen(p, c, buf2, &count);
        if (ret != 0)
        {
                printf("fun:getMen() from == NULL || ncount == NULL err:%d\n", ret);
                return ret;
        }
        system("pause");
        return 0;
}


最佳答案
2020-3-4 13:29:45
本帖最后由 jackz007 于 2020-3-4 13:41 编辑
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "stdlib.h"

int main()
{
        int count , e , k                                                     ;
        char Text[] = {"abcdef,acccd,eeee,aaaa,e3eeeee,sssss,"} , buf[10][30] ;
        for(k = 0 , count = 0 , e = 0 ; Text[k] ; k ++) {
                if(Text[k] != ',') {
                        buf[count][e ++] = Text[k]                            ;
                        buf[count][e] = '\0'                                  ;
                } else {
                        count ++                                              ;
                        e = 0                                                 ;
                }
        }
        if(e) count ++                                                        ;
        for(k = 0 ; k < count ; k ++) printf("%s\n" , buf[k])                 ;
        system("pause")                                                       ;
}
        编译运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
abcdef
acccd
eeee
aaaa
e3eeeee
sssss
请按任意键继续. . .

C:\Bin>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-4 13:29:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-3-4 13:41 编辑
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "stdlib.h"

int main()
{
        int count , e , k                                                     ;
        char Text[] = {"abcdef,acccd,eeee,aaaa,e3eeeee,sssss,"} , buf[10][30] ;
        for(k = 0 , count = 0 , e = 0 ; Text[k] ; k ++) {
                if(Text[k] != ',') {
                        buf[count][e ++] = Text[k]                            ;
                        buf[count][e] = '\0'                                  ;
                } else {
                        count ++                                              ;
                        e = 0                                                 ;
                }
        }
        if(e) count ++                                                        ;
        for(k = 0 ; k < count ; k ++) printf("%s\n" , buf[k])                 ;
        system("pause")                                                       ;
}
        编译运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
abcdef
acccd
eeee
aaaa
e3eeeee
sssss
请按任意键继续. . .

C:\Bin>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 13:52:16 | 显示全部楼层
jackz007 发表于 2020-3-4 13:29
编译运行实况:

大哥 请问buf[count][e ++] = Text[k]  
这一句不是复制字符串吗 为啥不需要用strcpy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 13:57:49 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-4 13:59 编辑
琴长不过时光 发表于 2020-3-4 13:52
大哥 请问buf[count][e ++] = Text[k]  
这一句不是复制字符串吗 为啥不需要用strcpy


    因为 Text 就是一个字符串,用 strcpy() 只能无选择的复制整个字符串,那 ',' 的作用如何落实,字符串还怎么分割?
    buf[count][e ++] = Text[k] 只是复制字符串Text 中的一个字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 14:15:20 | 显示全部楼层
jackz007 发表于 2020-3-4 13:57
因为 Text 就是一个字符串,用 strcpy() 只能无选择的复制整个字符串,那 ',' 的作用如何落实,字 ...

谢谢了 大哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 20:56:26 | 显示全部楼层
jackz007 发表于 2020-3-4 13:57
因为 Text 就是一个字符串,用 strcpy() 只能无选择的复制整个字符串,那 ',' 的作用如何落实,字 ...

大哥 上面那个用指针的p-pTmp 做下标的错哪了 能修改吗 我看的视频是连续的 要是这个搞不懂没法往后面学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-15 23:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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