牛客网—倒置字符串(注释超详解) i like beijing.

简介: 牛客网—倒置字符串(注释超详解) i like beijing.


大家先看看这道题目的描述:

 通过这一道题,我想写一点自己对自己初次学习指针的心得看法,这个指针系列我还是会继续更新的,毕竟人都是经历了才会成长,那学习了才会提升对吧(如果这里我理解指针有错误大家可以给我批评指正,因为我需要学习! )

 1.指针可以取出数组的第一个元素的地址从而可以达到遍历数组的作用.

      

我还是喜欢写题的时候先想思路:

1)观察i like beijing. 发现我可以通过下面的操作把这句话给它弄成我需要的内容.

其实很简单:

第1步一> i ekil .gnijieb  其实变成这样就是为了让一句话全部转置对吧?

第2步—> beijing. like i 其实说白了就是每一个单词的转置对吧?

第3步—> 打印啦.

2)为了初学者能够理解我的思路,下面我会注释加分割.

include<stdio.h>

include<string.h>

void revers(char left,char right)
{

//下面这个方法就是 1 2 3  4 5
//5 与 1交换然后 依次交换  直到left==right 这不跳出while 循环了嘛,所以拿这个例子你去理解下面这个 代码 
//
while(left<right)
{
    char temp=*right;
    *right=*left;
    *left=temp;
    left++;
    right--;
}
//看完这个咱还回去哈..

}
//这里先打出c语言主函数部分并且注释学习.
int main()
{

char arr[100];
//gets函数去输入.  小技巧:gets一次输入一行代码. getchar一次输入一个字符
gets(arr);
char* cur=arr;    
//这里 用指针cur加* 去取走数组arr的第一个地址.
while(*cur)
{
    char* start = cur;
    char* end = cur;
    //这样定义start 是保存初地址,也可以理解为第一个元素的下标.
    //end 是为了遍历我的字符串对吧?目的也就是找独立的单词.
    while(*end!=' ' && *end!='\0')
    {
        end++;
    }
    //定义一个函数然后作用是为了单词转置,把俩地址传过去.好,我们去瞅瞅定义的函数吧.  向上 
    //看吧
    revers(start,end-1);
    //
    if(*end!='\0')
    {
        cur=end+1;
    }
    else
    {
        cur=end;
    }
    //为下一个单词做准备
}    
//打印出去
int len=strlen(arr);
revers(arr,arr+len-1);
printf("%s",arr); 
return 0;

}
下面来试试先全部转置再单词转置.

上面是先转置单词再全部转置.

我本人建议自己先学第一种方法然后自己去学我给你这种思路的代码,非常相似,所以自己敲敲锻炼一下自己对于指针的使用.

include<stdio.h>

include<string.h>

void reverse(char left,char right)
{

while(left<right)
{
    char temp=*left;
    *left=*right;
    *right=temp;
    left++;
    right--;
}

}
int main()
{

char arr[101];
gets(arr);
int len=strlen(arr);
reverse(arr, arr+len-1);
//每个单词的逆序.
char* cur=arr;
while(*cur)
{
    char* start=cur;
    char* end=cur;
    while(*end!=' ' && *end!='\0')
    {
        end++;
    }
    reverse(start,end-1);
    if(*end!='\0')
    {
        cur=end+1;
    }
    else
    {
        cur=end;
    }
} 
printf("%s",arr);
return 0;

}
蟹蟹你完我的文章,希望爱学习编程的一起进步一起学习,编程路漫漫,蟹蟹有你们相伴(虽然现在没啥人哈哈).

相关文章
|
11月前
|
算法 程序员
【Leetcode】NC31 第一个只出现一次的字符(牛客网)、面试题 01.01. 判定字符是否唯一
题目描述: 描述 在一个长为n字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
62 0
|
4月前
【每日一题Day117】LC1234替换子串得到平衡字符串 | 双指针
【每日一题Day117】LC1234替换子串得到平衡字符串 | 双指针
38 0
|
3月前
【题解】NowCoder BC149 简写单词
【题解】NowCoder BC149 简写单词
38 15
|
11月前
代码随想录 Day7 字符串1 LeetCode T344反转字符串 T541 反转字符串II 151翻转字符串的单词
代码随想录 Day7 字符串1 LeetCode T344反转字符串 T541 反转字符串II 151翻转字符串的单词
36 0
|
4月前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
4月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
62 0
|
算法 C语言
(c语言)将一句话的单词进行倒置,标点不倒置(i like beijing.)
(c语言)将一句话的单词进行倒置,标点不倒置(i like beijing.)
152 0
|
4月前
|
Java 容器
java字符串练习题2、反向输出英文字符串
java字符串练习题2、反向输出英文字符串
34 0
|
4月前
【每日一题Day177】LC1023驼峰式匹配 | 模拟+双指针
【每日一题Day177】LC1023驼峰式匹配 | 模拟+双指针
40 0
【每日一题Day177】LC1023驼峰式匹配 | 模拟+双指针
|
4月前
|
缓存
牛客网刷题总结(如何清除缓存区,字母大小写替换的两种方法,一元二次方程解的输出)
牛客网刷题总结(如何清除缓存区,字母大小写替换的两种方法,一元二次方程解的输出)
41 0