如何解决字符串(语句单词)逆序输出问题——C语言

一、字符串整体逆序输出

比如将“I love you!”逆序输出为“!uoy evol I”。

思路很简单,只要把最后一位“!”的地址与“I”的地址进行交换,“u”与第二位的“ ”进行交换.....依次进行交换,到中间位置就停止,即完成字符串逆序。

我们可以通过以下代码编译:

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[100];//创建一个字符串型变量
	gets(arr);//输入"I love you!"
	int len = strlen(arr);//计算出字符串的长度
	char* left = arr;//定义一个指针变量*left为arr的首地址
	char* right = arr + len-1;//定义*right为arr的末地址
	while (left < right)//要求左边left地址要小于右边right地址
	{//此处进行首末地址进行交换
		char tem = *left;
		*left = *right;
		*right = tem;
		left++;//left往右移动一位
		right--;//right往左移动一位
	}//只要left不小于right时循环就终止,arr中单个字符就交换位置了
	printf("%s", arr);//此时的arr已经完成倒置
}

运行结果如下:

二、语句中单词进行倒置

如“I love you!”进行倒置为“you! love I”。

解决这种倒置的思路为:

1.将整个字符串进行倒置。

2.将倒置后的单个单词再进行一次倒置

 简单而言也就是我们只需要进行两次倒置就可以得到结果。

void reverse(char* l, char* r)
{
    while (l < r)//字符串交换循环,详见上一个字符串倒置
    {
        char tmp = *l;
        *l = *r;
        *r = tmp;
        l++;
        r--;
    }
}

我们先建立一个倒置函数,便于我们的代码简单简洁。


int main()
{
    char arr[100] = { 0 };
    //输入
    gets(arr);
    int len = strlen(arr);
    //逆序
    //1. 逆序整个字符串
    char* left = arr;
    char* right = arr + len - 1;
    reverse(left, right);//进行字符串倒置

    //2. 逆序每个单词
    char* cur = arr;//创建*cur指针地址,用它在后面进行字符串移动判断
    char* start = arr;//*start来记录第一个字符

    while (*cur != '\0')//*cur往右移动进行判断,过程中可以把单个单词进行倒置,遇到’\0‘就停止
    {
        while (*cur != ' ' && *cur != '\0')//如果*cur往右移动时遇到' '或者'\0'就停止
        {
            cur++;//往右移动一位
        }
        reverse(start, cur - 1);//可以将这个循环结束前的单词进行倒置
        start = cur + 1;//把第二个单词的第一个字符个start
        if (*cur != '\0')
            cur++;//把第二个单词第一个字符赋给cur
    }
    printf("%s\n", arr);

    return 0;
}

运行结果如下:

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用循环和指针来实现字符串逆序输出,代码如下: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "abcdefg"; int len = strlen(str); char *p_start = str; char *p_end = str + len - 1; while (p_start < p_end) { char temp = *p_start; *p_start = *p_end; *p_end = temp; p_start++; p_end--; } printf("逆序输出字符串为:%s\n", str); return 0; } ``` 输出结果为: ``` 逆序输出字符串为:gfedcba ``` ### 回答2: c语言字符串逆序输出可以通过遍历字符串并利用额外的变量进行倒序输出。下面是一种实现方式: ```c #include <stdio.h> #include <string.h> void reverseString(char* str) { int len = strlen(str); for (int i = len - 1; i >= 0; i--) { printf("%c", str[i]); } } int main() { char str[] = "abcdefg"; reverseString(str); return 0; } ``` 在上面的代码,首先利用strlen函数求出字符串的长度。然后利用for循环从字符串的最后一个字符开始遍历,每次将字符打印输出即可实现逆序。在示例,打印的结果为"gfedcba"。 值得注意的是,以上只是一种简单的字符串逆序输出的实现方式,还有其他更高效或更优雅的方法,如使用递归、利用指针等。 ### 回答3: 要将字符串"abcdefg"逆序输出,可以使用C语言的字符数组和循环语句。具体步骤如下: 1. 首先,定义一个字符数组存储字符串"abcdefg",如`char str[] = "abcdefg";`。 2. 接下来,使用一个循环将字符数组的字符逆序输出。循环变量初始化为字符串的长度减一,循环条件为循环变量大于等于0,每次循环变量减一。循环内部使用`printf("%c", str[i]);`语句输出字符数组对应位置的字符。具体代码如下: ```c int i; for (i = strlen(str) - 1; i >= 0; i--) { printf("%c", str[i]); } ``` 3. 最后,执行上述代码,即可将字符串"abcdefg"逆序输出为"gfedcba"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值