🚀 加载中...
侧边栏壁纸
博主头像
Fish's Embedded Study & Share

积跬步以至千里,积小流以成江河

  • 累计撰写 11 篇文章
  • 累计创建 14 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

C语言编程题-“i love china“按单词逆序输出

玩不转C的鱼
2025-03-20 / 0 评论 / 0 点赞 / 14 阅读 / 0 字

编程题目:

给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求不允许使用第三方变量保存数据,但可以使用辅助指针变量等。

思路及程序编写

思路一

首先将字符串整体倒置:“anihc evol i”

然后再次遍历字符串,将每个单词倒置:“china love i”

程序如下:


#include <stdio.h>

void swapstr(char head ,char tail);

int main(int argc, const char *argv[])
{

	char str[] = "I love china";
	char head = str, tail = str;
    	
	puts(str);

    //先将尾指针定位到字符串尾部
	while(*tail != '\0')

	tail ++;

    //将整个字符串倒置
	swapstr(str, tail - 1);

    //主函数开始扫描遍历整个倒置后的字符串
	while(*head != '\0')
	{
        //查找单词头		
		while(*head == 32)   //32是空格
		head++;
		//找到头后将尾定位到头,开始找单词尾
		tail = head;
		while(*tail != 32 && *tail != '\0')
		tail++;
		//前两步找到头之后将单词倒置(因为循环结束后tail指向'\0',所以tail-1)
		swapstr(head,tail - 1);
		//单词倒置后将头指向尾,为下次找单词做准备
		head = tail;
	}
	puts(str);
	return 0;
}

//完成指定字符串倒置
void swapstr(char head, char tail)
{
	char temp = 0;
	while(head < tail)
	{
		temp = *head;
		head = tail;
		*tail = temp;
		head++;
		tail--;
	}
}

思路二

(这种思路是为了引出strtok函数和指针数组结合用法,可能不满足题目要求,但结果一致。)

首先使用strtok函数进行字符串分割(strtok函数用法可以百度)

然后定义一个指针数组,把分割后的字符串逐个存入指针数组(指针数组概念必须知道)

然后将这个指针数组内的多个字符串用strcat函数进行逆序连接

程序如下:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
	char str[] = "i love china";
	char *p_arr[3] = {NULL,NULL,NULL};
	char arr[100] = {0};
	char *p = NULL;
	int i = 0;
	p = strtok(str," ");//获取第一个字符串
	while(p != NULL)  //继续获取其他字符串 直至检测不到字符串返回空指针
	{
		printf("%s ",p);	//打印信息,用于调试
		p_arr[i] = p;		//将获取到的字符串存入指针数组
		i++;
		p = strtok(NULL," ");   //获取下一个字符串
	}
	putchar('\n');
	for(i = 0;i < 3;i++)
	{
		printf("%s ",p_arr[i]);   //打印调试信息
	}
	putchar('\n');
	for(i = 2; i >= 0;i--)     //倒序
	{
		printf("%s ",p_arr[i]);  //打印调试信息
		strcat(arr,p_arr[i]);    //3个字符串倒着连接
		strcat(arr," ");
	}
	putchar('\n');
	puts(arr);					//输出结果
	return 0;
}

0

评论区