本帖最后由 jackz007 于 2020-3-11 22:56 编辑
采用二维字符数组来保存分割好的字符串有个问题,二维数组的每一行都是等长的,要求这个行长度必须能够容纳被分割出来最长的字符串,所以,这个长度很重要。但是,我们事先并不知道这个长度的合适值,如果设置小了肯定会导致下标越界,如果设置长了,会非常浪费存储空间。
在这里,我们不考虑把分割好的字符串存入另一个二维字符数组,而是采用字符指针数组记录每个字符串在 str[] 中的开头,然后,把分隔符直接改成字符串结束符 '\0',这样,只要通过指针数组,就可以访问到每一个被分割出来的字符串。#include<stdio.h>
#define MAX 1024
int main()
{
char c , str[MAX] , * pos[MAX] ;
int d , e , k , m ;
printf("请输入一个英文句子:") ;
for(m = 0 ; (c = getchar()) != '\n' && m < MAX ; str[m ++] = c , str[m] = '\0') ;
printf("请输入分割符:") ;
c = getchar() ;
for(d = 0 , e = 0 , k = 0 ; k < m ; k ++) {
if(str[k] == c) {
str[k] = '\0' ;
e = 0 ;
} else {
if(! e) pos[d ++] = & str[k] ;
e ++ ;
}
}
printf("现在依次打印每个单词:\n") ;
for(k = 0 ; k < d ; k ++) printf("%s\n" , pos[k]) ;
}
编译、运行实况:C:\Bin>g++ -o x x.c
C:\Bin>x
请输入一个英文句子:23@23423@234@
请输入分割符:@
现在依次打印每个单词:
23
23423
234
C:\Bin>x
请输入一个英文句子:@23@@23423@@@234@@5
请输入分割符:@
现在依次打印每个单词:
23
23423
234
5
C:\Bin>
|