C——字符串练习

1.

查找一个字符在字符串1中出现的所有字符位置,

比如:

输入

asdfwd

d

输出为

3

6

输入

hhff

h

输出为

1

2

 1 #include <string.h>
 2 int main(int args,const char *argv[])
 3 {
 4     char a[100] = "sgfgeasdefw";
 5     char target ;
 6     scanf("%c",&target);
 7     char *p = a;
 8     while((p=strchr(p, target)))
 9     {
10         printf("%ld\n",p-a+1);
11         p++;
12     }
13 }

2.

比较一个字符串2在字符串1中是否存在,如果存在输出Y,否则输出N

比如:

输入

asdfwd

dfw

输出为

Y

输入

sgfgeasdfw

hhff

输出为

N

 1 #include <string.h>
 2 int main(int args,const char *argv[])
 3 {
 4     char a[100] = "sgfgeasdfw";
 5     const char *b = "ge";
 6     //传入的第二个参数,虽然是一个字符串,但是会自动解析位对应的每一个字符,之后判断a字符串中出现的第一个位置
 7     //strtok(a, b);
 8     //strstr(const char *,const char *);返回的是子字符串中出现的第一个位置
 9     if(strstr(a, b))
10     {
11         printf("Y");
12     }else{
13         printf("N");
14     }
15 }

3.

查找一个字符串2在字符串1中出现的次数,

比如:

输入

asdfwd

d

输出为

2

输入

hhff

h

输出为

2

 1 #include <string.h>
 2 int main(int args,const char *argv[])
 3 {
 4     char *src = "asfdasdfassdf";
 5     char target[100] = {};
 6     scanf("%s",target);
 7     int cnt = 0;
 8     char *p = src;
 9     while((p=strstr(p, target)))
10     {
11         cnt++;
12         p++;
13     }
14     printf("出现的次数:%d",cnt);
15     return 0;
16 }

4.

给定一个任意字符串,然后将该字符串逆序输出。

比如:

输入

asdfwd

输出为

dwfdsa

 1 #include <string.h>
 2 char *reverse(char *a)
 3 {
 4     int len = (int)strlen(a);
 5     char b[100] = {0};
 6     for(int i=len-1;i>=0;i--)
 7     {
 8         b[len-i-1] = a[i];
 9     }
10     char *res = b;
11     return res;
12 }
13 int main(int args,const char *argv[])
14 {
15     char *a = "afdasfas";
16     char *res = reverse(a);
17     printf("%s",res);
18     return 0;
19 }

5.

题目描述:“eeeeeaaaff" 压缩为 "e5a3f2",请编程实现

这题有一个比较尴尬的地方是,假如字符串是是“abc”,那么如果化成“a1b1c1”超过了原来字符串的长度,又题目给的是原地,我们假设字符串原长度就是题目给的那么长,那么就没办法了,所以如果遇到单个字母的后面不加1

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4
 5 void condense( char * src_str)
 6 {
 7     if(src_str==NULL)
 8         return ;
 9
10     int count=1;
11     int sub_length=1;
12     for(int i=1;i<strlen(src_str);i++)
13     {
14         if(src_str[i]==src_str[i-1])
15         {
16             count++;
17         }
18         else
19         {
20             if(count==1)
21             {
22                 src_str[sub_length++]=src_str[i]; //单个只要赋值
23             }
24             else
25             {
26                 src_str[sub_length++]=count+48; //多个要加上数字,+48变成ascii码
27                 src_str[sub_length++]=src_str[i];
28                 count=1;
29             }
30         }
31     }
32
33     if(sub_length<strlen(src_str))
34         src_str[sub_length]=‘\0‘;
35
36     printf("%s \n",src_str);
37
38
39 }
40
41 int main()
42 {
43     char str[]="abbbdffeeg";
44     condense(str);
45     getchar();
46     return 0;
47 }

时间: 2024-10-14 00:58:16

C——字符串练习的相关文章

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

PHP 格式化字符串sprintf()

字符串函数 sprintf() 函数把格式化的字符串写入一个变量中 函数说明:sprintf(格式, 要转换的字符串)  参考PHP手册 返回: 格式化后的字符串 举例: 如:保留2位小数, $str = '99.9';echo sprintf('%01.2f', $str);结果为:99.90 echo round($str, 2); 结果为:99.9

js中字符串的替换

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replacement)参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返

数组、字符串、集合

数组与集合的转换.数组与字符串的转换 ========数组变集合 String[] arr = {"abc","cc","kkkk"}; //把数组变成list集合有什么好处? /* 可以使用集合的思想和方法来操作数组中的元素. 注意:将数组变成集合,不可以使用集合的增删方法. 因为数组的长度是固定. contains. get indexOf() subList(); 如果你增删.那么会产生UnsupportedOperationExcepti

《Java编程思想》第十三章 字符串

<Java编程思想>读书笔记 1.String作为方法的参数时,会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置,从未动过. 2.显式地创建StringBuilder允许预先为他指定大小.如果知道字符串多长,可以预先指定StringBuilder的大小避免多次重新分配的冲突. 1 /** 2 * @author zlz099: 3 * @version 创建时间:2017年9月1日 下午4:03:59 4 */ 5 public class UsingStringBuilder {

SpringMVC后台使用对象接受参数字符串转日期

在springMVC配置文件中加入: <bean id="dateConvert" class="com.iomp.util.DateConvert"/> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property

python判断字符串,str函数isdigit、isdecimal、isnumeric的区别

s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() 所有字符都是大写s.istitle() 所有单词都是首字母大写,像标题s.isspace() 所有字符都是空白字符.\t.\n.\r 判断是整数还是浮点数a=123b=123.123 >>>isinstance(a,int)True>>>isinstance(b,floa

【自动化__持续集成】___java___字符串转数组

一.代码如下 package www.wujianbotwo; public class Demo08 { public static void main(String[] args) { // TODO Auto-generated method stub String content= "wujianbo,wujianob,33333"; String[] ud= content.split(",");//将字符串分段成一个数组 for(int i=0; i&l

字符串的模式匹配中的算法

字符串的模式匹配是一个比较经典的问题:假设有一个字符串S,称其为主串,然后还有一个字符串T,称其为子串. 现在要做的是,从主串S当中查找子串T的位置,如果存在返回位置值,如果不存在返回-1.另外主串又称为目标串, 子串称为模式串. 暴力匹配算法 这是一个经典的串匹配问题,涉及的算法也比较多,先讨论第一种简单的暴力算法,思路如下 将主串S的第pos个字符 与 子串T的第一个字符比较, 若相同,继续比较子串和主串后面的字符. 若不相同,那么从主串S的第(pos + 1)个字符开始继续向后匹配,直到匹