代码:
#include <stdio.h>
#include <string.h>
int main () {
char s[600000];
gets(s);
char *p[600000];
long long i=0;
p[i]=strtok(s," ");
while(p[i]!=NULL)
{
i++;
p[i]=strtok(NULL," ");
}
for(long long j=i-1;j>=0;j--)
{
if(j==0) printf("%s",p[j]);
else printf("%s ",p[j]);
}
return 0;
}
题目:
解题思路:
此题需要将含有若干个空格分布的不超过500000长度的字符串拆分为若干个单词并倒序输出.
对于字符串的处理这里用到了一个包含在string.h里面的函数strtok函数,它可以将字符串按特定分隔符进行切割,这里分割为设置为“ ”(空格)。
第一步:
创建字符数组并储存输入的字符串:
char s[600000]; 因为字符串长度算上\0就超过了给定长度,定义数组长度一定超过500000
gets(s);
第二步:
创建字符串指针(strtok函数用到),使用一次strtok函数:
char *p[600000]; 这里的p[x]用来储存每一个分割出来的单词
int i=0; (记录切割出单词的个数)
p[i]=strtok(s," "); 使用strtok函数对字符串进行第一次切割
这里简单介绍下strtok函数的用法:
strtok(待处理部分,“切割的符号” ) 返回的是切割出来的部分字符串
用p[i]装入切出来的单词
第三步:
切割剩下的部分:
while(p[i]!=NULL) 当切割的字符串的不为空
{
i++; 切割的单词数加一
p[i]=strtok(NULL," "); 把切下来的单词装入字符指针数组p里
}
第四步:
倒序打印:
for(int j=i-1;j>=0;j--)
{
if(j==0)
{
printf("%s",p[j]);
}
else
printf("%s ",p[j]);
}
总结:
通用过使用strtok函数将字符串分割装入数组中,再反向输出每个单词。