吾爱姚吕婧妍 发表于 2018-12-21 21:46

12.21 小白的C语言

本帖最后由 吾爱姚吕婧妍 于 2018-12-22 19:25 编辑

/*1.逆置字符串reverse_str()*/
//思路:分开赋值 进行改变
#include<stdio.h>
#include<string.h>
char reverse_str(char *p)
{
   
int i,t=0;    //i为循环遍历 t为统计字符有多少个

/*将p指向最后最后一位置*/
while(*p!='\0')
{
          p++;
          t++;
}

char a={0};//等一下做赋值转换使用

p=p-1;      //因为现在位置为空所以要-1

/*这里逆序赋值给a[]*/
for(i=0;i<t;i++,p--)
{
          a=*p;         
}

//这里p位置又为空 所以加+1原因for循环后最后又循环一次

p=p+1;

/*在利用逆向好的数组赋值回去给指针 */
for(i=0;i<t;i++,p++)
{
          *p=a;
}

return 0;      
}

int main()
{
      char *a;
      char b[]="hello";
      a=b;
    reverse_str(a);
      printf("%s\n",b);
      return 0;
   
}/*题目2:将一个字符串,左边N个字节(比如3个字节)旋转到字符串最右边。
比如:"hello world"-->"lo worldhel"。就是将前面3个字符"hel"旋转到了字符串尾部。
*/
//思路:延续题目一 赋值大法
#include<stdio.h>
#include<string.h>
int rotate_str(char *p,int n)
{
      int o,i,t=0;    //i为循环遍历 t为统计字符有多少个 多了一个o为等下赋值用
/*将p指向最后一位 统计其长度*/
while(*p!='\0')
{
          p++;
          t++;
}
char a={0};//等一下做赋值转换

/*将p指向n+1位置进行赋值*/
for(i=t;i!=n;i--)
{
          p--;
   }

//赋值
for(i=0;i<(t-n);i++,p++)
{
          a=*p;         
}
   o=i;//保存其位置方便下面赋值
   
/*将p指向开始 对所需旋转的位置赋值*/
   for(i=0;i<t;i++)
   {
         p--;
      }
      
//再次赋值
      for(i=0;i<n;i++,p++,o++)
{
         a=*p;         
}

//在赋值回去给指针
for(i=0;i<n;i++)
   {
         p--;
      }
   
   /*利用数组赋值回去*/
for(i=0;i<t;i++,p++)
{
          *p=a;
}
return 0;      
}

int main()
{
      int n=3;
      char *a;
      char b[]="hello wll";
      a=b;
    rotate_str(a,n);
      printf("%s\n",b);
      return 0;
}

爱飞的猫 发表于 2018-12-21 23:40

把我的答案也放出来,共同学习

```c
// 1. 逆置字符串 reverse_str()

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

extern inline
void swap_at(char* p, int i, int j) {
if (i != j) {
    char tmp = p;
    p = p;
    p = tmp;
}
}

void reverse_str(char* str) {
int last_index = strlen(str) - 1;
int mid = last_index / 2;
for(int i = 0; i < mid; i++) {
    swap_at(str, i, last_index - i);
}
}

int main() {
char b[] = "hello";
reverse_str(b);
printf("%s\n", b);
return 0;
}
```

```c
// 题目2:将一个字符串,左边N个字节(比如3个字节)旋转到字符串最右边。
// 比如:"hello world"-->"lo worldhel"。就是将前面3个字符"hel"旋转到了字符串尾部。

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

#define USE_MEMCPY (1)

void rotate_str(char *p, int n) {
int len = strlen(p);

// 简单检查
assert(n <= len);
assert(n > 0);

#if USE_MEMCPY
// 方法 1: 利用内存复制移动
char* tmp = (char *)malloc(n);
memcpy(tmp, p, n);
memcpy(p, p + n, len - n);
memcpy(p + (len - n), tmp, n);
free(tmp);
#else
// 方法 2: 手动移动
for(int i = 0; i < n; i++) {
    char tmp = p;

    // 向前移一位
    for (int j = 1; j < len; j++) {
      p = p;
    }
    // 补上原本第一位的内容
    p = tmp;
}
#endif
}

int main() {
char b[] = "hello world";
rotate_str(b, 3);
printf("%s\n", b);
return 0;
}
```

wwwmirage 发表于 2018-12-21 21:57

学习一下

zhuangmm512 发表于 2018-12-21 22:19

学习了还不错

yuanjunye 发表于 2018-12-21 22:47

同小白前来学习

mzhsohu 发表于 2018-12-21 23:58

感谢分享!@学习了~!

nj001 发表于 2018-12-22 16:48

逆置字符串
// Copyright <Copyright Owner>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
void reverse_str(char *a) {
char b;
for (int i = 0; i < 5; ++i) {
    b = a;
}
b = 0;
strcpy(a, b);
}
int main() {
    char a[]="hello";
    reverse_str(a);
    printf("%s\n", a);
    return 0;
}

Leo岗 发表于 2018-12-22 17:06

用栈实现会简单一点耗时会小一点

cooper5454 发表于 2018-12-23 12:15

jixun66 发表于 2018-12-21 23:40
把我的答案也放出来,共同学习

```c


你们学的都是什么教程 小学生程度能学吗{:17_1085:}

吾爱姚吕婧妍 发表于 2019-5-17 18:20

#include<stdio.h>
#include<string.h>
int main()
{
        int check1(char *p);
        int check2(char *q);
        int i;
        char c;
        do
        {
        printf("Please input number:");
        gets(c);
        i=check1(c);
        }while(i<0);

        puts(c);//想问问c为什么为空

        return 0;
}

int check1(char *p)
{
        if(strlen(p)<11)
        {
                return -1;
        }
        else
        {

                return check2(p);
        }
}

int check2(char *q)
{

        int i=0;
                puts(q);
        for(;*q=0;q++)
        {
                if(*q<='0'&&*q>='9')
                        i=-2;       
        }
        return i;
}

页: [1] 2
查看完整版本: 12.21 小白的C语言