进程(起个开头,复习的一天)day26

二:进程

一:字符串分割strtok

char *strtok(char *str, const char *delim)

参数

  • str: 要分割的字符串。在第一次调用时,传入要分割的字符串;后续调用时,传入 NULL,表示继续分割同一个字符串。
  • delim: 分隔符字符串。strtok() 会根据这个字符串中的任意一个字符来分割 str

返回值: 返回指向下一个标记的指针。如果没有更多的标记,则返回 NULL。

    char buf[128]="zhangsan:16:180:东航中心";
    char* args[4]={NULL};

    args[0]=strtok(buf,":"); // name 
    args[1]=strtok(NULL,":"); // age NULL 是接着上次分割符+1的位置,开始 分离字符串,也是把:置成\0,识别NULL
    args[2]=strtok(NULL,":");
    args[3]=strtok(NULL,":");

    printf("%s_%s_%s_%s\n",args[0],args[1],args[2],args[3]);
一:用strtok显示想要的进程数据

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

int main(int argc, char** argv)
{
  FILE* fp = fopen("/proc/800/status", "r");
  if (NULL == fp)
  {
    printf("fopen error\n");
    return 1;
  }
  char data[3][128] = {0};
  for (int i = 0; i < 6; i++)
  {
    char buf[128] = {0};
    fgets(buf, sizeof(buf), fp);
    if (0 == i)
    {
      strcpy(data[0], buf);
    }
    else if (2 == i)
    {
      strcpy(data[1], buf);
    }
    else if (5 == i)
    {
      strcpy(data[2], buf);
    }
  }

  char *name=NULL;
  char* state=NULL;
  char* pid = NULL;

   strtok(data[0],"\t");
   name = strtok(NULL,"\n");

   strtok(data[1],"\t");
   state = strtok(NULL,"\n");
   
   strtok(data[2],"\t");
   pid = strtok(NULL,"\n");
   char result[128]={0};
   sprintf(result,"%s:%s:%s\n",name,state,pid);
   fputs(result,stdout);
  fclose(fp);

  // system("pause");
  return 0;
}
二:实现字典查找(用链表和文件)
#include "linklist.h"
#include <stddef.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
     FILE *fp = fopen("/home/linux/dict.txt", "r");
    if (fp == NULL) {
        printf("fopen error\n");
        return 1;
    }

    LinkList *ll = CreateLinkList();
    char buf[1000];
    DATATYPE data;

    while (fgets(buf, sizeof(buf), fp)) {
        // 清除行末换行符
        buf[strcspn(buf, "\n")] = '\0';

        char *word = strtok(buf, " ");
        char *mean = strtok(NULL, "\n");

        if (word == NULL || mean == NULL) {
            continue;
        }

        // 拷贝到结构体中
        strncpy(data.word, word, sizeof(data.word) - 1);
        data.word[sizeof(data.word) - 1] = '\0';

        strncpy(data.mean, mean, sizeof(data.mean) - 1);
        data.mean[sizeof(data.mean) - 1] = '\0';

        InsertTailLinkList(ll, &data);
    }

    fclose(fp);
//ShowLinkList(ll);
#if 1
  char want_word[20] = {0};
  scanf("%s", want_word);
  DATATYPE *result = FindInLinkList(ll, want_word);
  if (result != NULL) {
    printf("查找到:%s\t%s\n", result->word, result->mean);
  } else {
    printf("未找到该单词。\n");
  }
  #endif

  DestroyLinkList(&ll);

  // system("pause");
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值