C语言倒置字符串问题怎么解决

这篇文章主要介绍“C语言倒置字符串问题怎么解决”,在日常操作中,相信很多人在C语言倒置字符串问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言倒置字符串问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    先来看题

    C语言倒置字符串问题怎么解决  c语言 第1张

    解题思路

    首先我们定义一个字符数组来存放字符串,然后用 gets函数来读入字符串,接下来进行处理阶段,设计一个逆序函数逆序整个字符串,然后再逆序每个单词,最后处理一下细节再输出

    解题过程

    1.输入

    定义完一个字符数组后,因为scanf不吃空格符和换行符,所以这里输入我们采用gets函数来进行读入字符串,看代码????

    int main()
    {
    	char arr[101] = { 0 };
    	//输入
    	gets(arr);

    2.设计逆序函数

    看代码

    void reverse(char* left, char* right)
    {
    	assert(*left != NULL);
    	assert(*right != NULL);
    
    	while (left < right)
    	{
    		char tmp = *left;
    		*left = *right;
    		*right = tmp;
    		left++;
    		right--;
    	}
    }

    ☝️字符串的首尾元素逐个进行交换(不包括\0)☝️

    因为传过来的是数组首元素地址,所以我们要用指针变量来接收,为了代码更谨慎,这里使用了assert断言,防止遇到空指针而导致程序运行错误(不能忘记引头文件<assert.h>)

    3.逆序整个字符串

    int len = strlen(arr);
    	//逆序整个字符串
    	reverse(arr, arr + len - 1);

    我们使用strlen函数来计算字符串元素个数(不要忘记引头文件<string.h>),然后调用 reverse函数进行整个字符串的逆置。

    这里的 arr + len - 1是首元素地址+字符串长度(整数)- 1 得到的是末尾元素的地址如果不 - 1指向的就是 &rsquo;\0&lsquo;了

    4.逆序每个单词

    char* cur = arr;
    	while (*cur)
    	{
    		//找一个单词
    		char* start = cur;
    		while (*cur != ' ' && *cur != '\0')
    		{
    			cur++;
    		}
    		reverse(start, cur - 1);
    		if (*cur == ' ')
    		{
    			cur++;
    		}
    	}

    定义一个指针变量cur来接收逆序整个字符串之后的arr数组首元素地址,然后如果cur指向的字符不是&rsquo;\0&rsquo;的话就进入循环,然后再定义一个指针变量start来接收每个单词的首元素地址,然后进入循环判断如果cur指向的不是空格或者&rsquo;\0&rsquo;就往后跳一个字符,直到cur指向的是空格或者&rsquo;\0&lsquo;了,就说明已经遍历完确认了一个单词,然后进入reverse函数 来逆序单词(cur - 1 是因为如果不 -1,cur指向的是空格或者&rsquo;\0&lsquo;

    最后如果cur指向的是空格而不是&rsquo;\0&lsquo;就说明还没有结束,还有单词没有逆序完,往后跳一个字符循环继续

    源码

    #include<stdio.h>
    #include<string.h>
    #include<assert.h>
    
    void reverse(char* left, char* right)
    {
    	assert(*left != NULL);
    	assert(*right != NULL);
    
    	while (left < right)
    	{
    		char tmp = *left;
    		*left = *right;
    		*right = tmp;
    		left++;
    		right--;
    	}
    }
    int main()
    {
    	char arr[101] = { 0 };
    	//输入
    	gets(arr);
    	//处理
    	int len = strlen(arr);
    	//逆序整个字符串
    	reverse(arr, arr + len - 1);
    	//逆序每个单词
    	char* cur = arr;
    	while (*cur)
    	{
    		//找一个单词
    		char* start = cur;
    		while (*cur != ' ' && *cur != '\0')
    		{
    			cur++;
    		}
    		reverse(start, cur - 1);
    		if (*cur == ' ')
    		{
    			cur++;
    		}
    	}
    	//打印
    	printf("%s\n", arr);
    
    	return 0;
    }

    到此,关于“C语言倒置字符串问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注蜗牛博客网站,小编会继续努力为大家带来更多实用的文章!

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    评论

    有免费节点资源,我们会通知你!加入纸飞机订阅群

    ×
    天气预报查看日历分享网页手机扫码留言评论电报频道链接