Pārlūkot izejas kodu

feat: 完成主要功能

输入分割标识符
输出分割结果
SongZihuan 4 gadi atpakaļ
revīzija
e424e6b7a1
4 mainītis faili ar 101 papildinājumiem un 0 dzēšanām
  1. 5 0
      .gitignore
  2. 6 0
      CMakeLists.txt
  3. 1 0
      README.md
  4. 89 0
      main.c

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+.idea
+cmake-build-debug
+*.out
+*.o
+*.exe

+ 6 - 0
CMakeLists.txt

@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.17)
+project(split C)
+
+set(CMAKE_C_STANDARD 11)
+
+add_executable(split main.c)

+ 1 - 0
README.md

@@ -0,0 +1 @@
+# SplitLine

+ 89 - 0
main.c

@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <string.h>
+#define MAX_SPLIT (100)
+#define MAX_SIZE_LINE 1024
+/**
+ * 输入分割坐标对, 按行分割内容
+ */
+
+int getSplit(int *split);
+int splitLine(char *base, char *after_split, int *split, int split_len, int line_len);
+int getLine(char *line);
+
+int main() {
+    int split[MAX_SPLIT];
+    int c_split;
+    if ((c_split = getSplit(split)) == 0)
+        return 1;
+    while (1){
+        char new[MAX_SIZE_LINE] = "Hello Wolrd";
+        char split_new[MAX_SIZE_LINE] = "";
+        int line_len = getLine(new);
+        if (line_len == 0)
+            break;
+        splitLine(new, split_new, split, c_split, line_len);
+        printf("split: %s\n", split_new);
+    }
+    return 0;
+}
+
+int getSplit(int *split){
+    int c_split;
+    printf("Enter the split number: ");
+    for (c_split=0; c_split < MAX_SPLIT; c_split++){
+        int tmp = 0;
+        if (!scanf("%d", &tmp) || tmp < 0)
+            break;
+        split[c_split] = tmp;
+    }
+    if (c_split == 0 || c_split % 2 != 0)
+        return 0;
+    while (getc(stdin) != '\n');
+    return c_split;
+}
+
+int splitLine(char *base, char *after_split, int *split, int split_len, int line_len) {
+    int c_split = 0;
+    int stop = 0;
+    for (int i=0;i < split_len;i += 2){
+        int a = split[i];
+        int b = split[i + 1];
+        int size = b - a;
+
+        if (b > line_len)
+            b = line_len;
+
+        if (a > line_len)
+            a = line_len;
+
+        if (a > b){
+            int tmp = a;
+            a = b;
+            b = tmp;
+        }
+
+        if (c_split + size > MAX_SIZE_LINE) {
+            size = MAX_SIZE_LINE - c_split;
+            stop = 1;
+        }
+        strncpy(after_split, base + a, size);
+        after_split += size;
+        c_split += size;
+        if (stop)
+            break;
+    }
+    return 0;
+}
+
+int getLine(char *line){
+    int len;
+    printf("Enter the split Line: ");
+    for (len=0;len < MAX_SIZE_LINE;len++){
+        char tmp = getc(stdin);
+        if (tmp == '\n')
+            break;
+        line[len] = tmp;
+    }
+    line[len] = '\0';
+    return len;
+}