c语言/c++字符串处理函数


函数

1.gets()

读取一行字符串,可以读取空格

gets(char s[]);

2.puts()

输出字符串

puts(char s[]);

3.strcpy()

把字符串s复制到字符串t,后面的’\0’也会补到字符串t后面

strcpy(char t[],char s[]);

4.strncpy()

把字符串s中以s+i地址为起点的长度为n的字符复制到t中,这里t的后面不会有’\0’

strncpy(char t[],char s[]+i,n);

5.strcat()

把字符串s接到字符串t的后面

strcat(char t[],char s[]);

6.strcmp()

比较字符串t和字符串s的大小,按ASCII值大小自左向右逐个字符比较;
如果t==s,返回0;
如果t>s, 返回>0的正数;
如果t<s, 返回<0的负数;

int strcmp(char t[],char s[]);

7.strstr()

1).查找子串t 在s中的位置,查找到了返回地址,否则返回NULL;
2).子串的定义:任意连续的字符组成的字符串。

strstr(char s[],char t[]);

8.strlen()

求字符串长度

strlen(char s[]);

9.strlwr()

将字符串中的大写字母转化为小写字母

strlwr(char s[]);

10.strupr()

将字符串中的小写字母转化为大写字母

strupr(char s[]);

11.排序

按字典序进行排序:
1). 对c语言char s[]排序,sort(s,s+n);
2). 对c++的string s排序,sort(s.begin(),s.end());

c++

1.substr()

两种用法:string s;
方法1:

    string s="Abcd";
	string ans=s.substr(1,3);//从下标为1开始截取长度为3位 ans="bcd";

方法2:

    string s="Abcd";
	string ans=s.substr(3);//从下标为3开始截取到末尾  ans="d";
	

2.reverse()反转函数

头文件#include< algorithm >
1.反转字符串string

	string s="ABCD";
	reverse(s.begin(),s.end() );//s="DCBA"

2.反转数组char s[]

	char s[4]={'a','b','c','d'};
	reverse(s,s+4);//s="dcba"

3.反转vector

	vector<int> v;
	reverse(v.begin() ,v.end() );

3.to_string

将int整数转化为string字符串

4.stoi

将string字符串转化为int值

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int x=611;
	string s=to_string(x);//"611"
	
	int y=stoi(s); //611
	cout<<s<<endl<<y;
	
	return 0;
}

5.string字符串转char 字符串

s.c_str()

6.s.find()

查找字符 在string中的位置,返回下标
string s; s.find(x)

7.tolower()/toupper()

分别为转为小写字母,转为大写字母

题目

撸串串

LH 撸串串
时间限制: 1.000 Sec 内存限制: 128 MB
题目描述
LH 和妹子去撸串。

LH 想撸 n 根串,每个串的长度为 d,LH 想找出 n 根串都有的一个子串,使得这个子串的长度最大。

请聪明的你帮帮 LH 来撸串吧。
输入
第一行给出两个正整数 n,d,表示 LH 有 n 个串,每个串的长度都为 d。
输出
输出一行一个整数表示 n 个串的最长公共子串长度。
样例输入 Copy

3 6
aabcab
abcaab
bcabca

样例输出 Copy

4

提示
对于 20% 的数据,n=1。
对于 50% 的数据,n≤5,d≤5。
对于 100% 的数据,n≤30,d≤30。

#include<iostream>
#include<cstring>
using namespace std;
char s[33][33];
char t[33];
 
int main()
{
	int n,d;cin>>n>>d;
	for(int i=0;i<n;i++) scanf("%s",s[i]);
	int ans=0;
	for(int i=0;i<d;i++)//确定子串起始点位置 
	{
		for(int j=1;j<=d-i;j++)//确定子串的长度 
		{
			strncpy(t,s[0]+i,j);
			t[j]='\0';
			int f=0;
			for(int r=1;r<n;r++)
			{
				if(strstr(s[r],t)==NULL)
				{
					f=1;break;
				}
			}
			if(!f&&strlen(t)>ans)
			 ans=strlen(t);
			
		}
	}
	cout<<ans;
	
	return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值