zoukankan      html  css  js  c++  java
  • [c/c++] programming之路(20)、字符串(一)

    一、字符串

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main(){
     5     char str[50]="notepad";
     6     printf("%x
    ",str);
     7     printf("%c,%d
    ",'','');
     8     printf("%c,%d
    ",0,0);
     9     printf("%c,%d
    ",'0','0'); 
    10     system("pause");
    11 }

    1 #include<stdio.h>
    2 #include<stdlib.h>
    3 
    4 void main(){
    5     char str[4]={'c','a','l','c'};
    6     printf("%s
    ",str);
    7     system("pause");
    8 }

    字符串之后没有结束符'',直到遇到为止

    二、指针

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main(){
     5     char *p= "tasklist";
     6     printf("%d,%d	",sizeof(p),sizeof("tasklist"));
     7     printf("%x	",&p);
     8     system(p);//本质上就是字符串的首地址
     9     system("pause");
    10 }

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main(){
     5     char *p= "tasklist";
     6     p = p + 4;//只打印list
     7     while (*p)//*p==0跳出循环,*p==''
     8     {
     9         printf("%c,%x
    ", *p,p);
    10         p++;
    11     }
    12 
    13     system("pause");
    14 }

    三、字符串数组

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main() {
     5     //字符串数组
     6     char str[4][10] = { { "notepad" },
     7     { "calc" },
     8     { "tasklist" },
     9     { "ipconfig" } };
    10     char(*p)[10] = str;    //指向二维数组的指针,
    11     for (int i = 0; i < 4; i++)//循环四次
    12     {
    13         system(p[i]);    //字符串元素首地址
    14     }
    15 
    16     system("pause");
    17 }
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 //字符串修改字符
     4 void main() {
     5     char str[10] = "taskoist";
     6     char *p = str;
     7     p = p + 4;
     8     *p = 'l';
     9     system(str);
    10     system("pause");
    11 }
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 //字符串修改字符
     4 void main() {
     5     char *p= "taskoist";//"taskoist"常量不可修改
     6     char *ps = p;
     7     ps += 4;
     8     //*ps = 'l';//运行时出错
     9     system(p);
    10     system("pause");
    11 }
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main() {
     5     char *p;
     6     scanf("%s",p);//使用了未初始化的局部变量“p”
     7     printf("%s",p);
     8     system(p);
     9 
    10     system("pause");
    11 }

    解决方法一

    char str[20];
    char *p=str;

    解决方法二

    char *p=(char *)malloc(sizeof(char)*20);//指针必须指向一片内存

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main() {
     5     char str[50];
     6     char str1[20];
     7     char str2[20];
     8     //gets(str1);//获取字符串初始化
     9     gets_s(str1);//VS2015使用的是新C标准,也就是C11,而VC6.0用的是老标准。    在新标准中,应该是用gets_s代替gets
    10     scanf("%s", str2); //获取字符串初始化
    11     printf("%s %s", str1, str2);
    12     sprintf(str, "%s %s", str1, str2);     //字符相加
    13     fprintf(stdout,"hello world");
    14 
    15     system("pause");
    16 }

    四、求字符串长度

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 int getLen(const char *p) {//传入的字符串不允许被随意修改
     5     int i = 0;
     6     if (p == NULL)    return -1;
     7     else
     8     {
     9         while (*p) {
    10             i++;
    11             p++;
    12         }
    13     }
    14     return i;
    15 }
    16 
    17 void main() {
    18     char str[] = "calc";
    19     printf("%d
    ",getLen(str));
    20     system("pause");
    21 }

    五、获取CMD输出

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 
     6 void execmd(char *in,char *out) {
     7     FILE *pipe = _popen(in,"r");//read 读取
     8     if (!pipe)    return ;    //判断管道是否为空
     9     char buffer[128] = {0};
    10     while (!feof(pipe)) {    //判断文件是否结束
    11         if (fgets(buffer, 128, pipe))//获取每一行的数据
    12         {
    13             strcat(out, buffer);//连接字符串
    14         }
    15     }
    16     _pclose(pipe);//关闭管道
    17     //return 1;
    18 }
    19 
    20 void main() {
    21     //注意:字符串需要初始化
    22     char CMDin[50] = { 0 };//输入的指令
    23     char CMDout[4096] = {0};//输出的语句
    24     scanf("%s",CMDin);//扫描输入
    25     execmd(CMDin,CMDout);//获取结果
    26     printf("打印的输出:%s",CMDout);//打印结果
    27     printf("%x",CMDout);
    28     //system(CMDin);
    29 
    30     system("pause");
    31 }

     六、字符串拼接

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<string.h>//字符串处理函数
     5 
     6 int getlen(char *str) {
     7     int num = 0;
     8     while (*str) {//取出内容,0就是字符
     9         num++;//计数一次
    10         str++;//指针移动一次
    11     }
    12     return num;
    13 }
    14 
    15 void mystrcat(char *all, char *add) {
    16     int all_len = getlen(all);
    17     int add_len = getlen(add);
    18     char *pall = all;
    19     char *padd = add;
    20     pall += all_len;//指针移动到/0
    21     while (*padd) {
    22         *pall = *padd;
    23         padd++;
    24         pall++;
    25     }
    26     *(pall + 1) = '';
    27 }
    28 
    29 void main() {
    30     char str[30]="tracert";//遍历路由
    31     char web[50];
    32     scanf("%s",web);
    33 
    34     //方法一
    35     /*char cmd[100];
    36     sprintf(cmd, "%s %s", str, web);
    37     system(cmd);*/
    38 
    39     //方法二
    40     /*strcat(str, " ");
    41     strcat(str,web);
    42     system(str);*/
    43 
    44     //方法三
    45     mystrcat(str, " ");
    46     mystrcat(str, web);
    47     system(str);
    48 }

    七、字符串检索

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 
     5 int getlen(char *str) {
     6     int num = 0;
     7     while (*str) {//取出内容,0就是字符
     8         num++;//计数一次
     9         str++;//指针移动一次
    10     }
    11     return num;
    12 }
    13 
    14 char * findstr(char *all, char *str) {
    15     char *p = NULL;
    16     int all_len = getlen(all);
    17     int str_len = getlen(str);
    18     for (int i = 0; i < all_len-str_len; i++)
    19     {
    20         int flag = 1;//假定字符串相等
    21         for (int j = 0; j < str_len; j++)
    22         {
    23             if (all[i + j] != str[j]) {//判定字符是否相等
    24                 flag = 0;
    25                 break;
    26             }
    27         }
    28         if (flag == 1) //如果为1,就是相等
    29         {
    30             p = &all[i];
    31             break;
    32         }
    33     }
    34     return p;
    35 }
    36 
    37 void main() {
    38     char all[200] = "i love china i love cpp i love c";
    39     //char str[30] = "i love cp";
    40     char str[30] = "i love cp0";
    41     //char *p = strstr(all, str);
    42     char *p = findstr(all, str);
    43     if (p == NULL)    printf("can not find!");
    44     else
    45     {
    46         printf("find!
    ");
    47         printf("*p=%c
    ",*p);//字符串检索的位置
    48     }
    49     system("pause");
    50 }

     八、字符串查找(指针查找)

     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 
     6 int  execmd(char *in, char *out)
     7 {
     8     char buffer[128] = { 0 };
     9     FILE *pipe = _popen(in, "r");//读取
    10     if (!pipe)    //管道创建为空,返回0
    11     {
    12         return 0;
    13     }
    14     while (!feof(pipe))    //判断文件是否结束
    15     {
    16         if (fgets(buffer, 128, pipe))    //获取每一行的数据
    17         {
    18             strcat(out,buffer);//连接字符串
    19         }
    20     }
    21     _pclose(pipe);//关闭管道
    22     return 1;
    23 }
    24 
    25 void main()
    26 {
    27     char CMDin[30] = "tasklist";//查看所有的进程
    28     char CMDout[8192] = { 0 };     //输出的语句
    29     execmd(CMDin, CMDout);    //获取结果
    30     char *p = strstr(CMDout, "QQ.exe");
    31     if (p == NULL)
    32     {
    33         printf("QQ不存在");
    34     }
    35     else
    36     {
    37         printf("QQ 存在");
    38         printf("*p=%c", *p);
    39     }
    40     getchar();
    41 }

  • 相关阅读:
    dirs命令
    pwd命令
    ls命令
    rmdir命令
    install命令和cp命令的区别
    ./configure,make,make install的作用
    install 命令
    Make 命令
    linux configure使用方法
    Linux下which、whereis、locate、find命令的区别
  • 原文地址:https://www.cnblogs.com/little-monkey/p/7441604.html
Copyright © 2011-2022 走看看