当前位置:首页 » 操作系统 » c字符串算法

c字符串算法

发布时间: 2023-01-06 13:35:57

‘壹’ c语言字符串

代码功能:

1、输入任意行数的内容(如果你想限制最多10行,自己加个变量计数好了)。

2、不想输入时,新行直接回车,会刷新显示统计个数。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedefstructstrs
{
charstr[100];
structstrs*next;
}STRS;
voidcontWord(char*str);//对字符串大小写字母计数
voidintput(STRS**strsHead,STRS**strsTail);//输入字符串,并显示统计结果(每输入完一行回车时,刷新数据)
voidprfStrs(STRS*strsHead,inttj);//打印字符串及统计结果
intdCon=0;//大写字母计数
intnCon=0;//数字计数
intmain()
{
STRS*strsHead=(STRS*)malloc(sizeof(STRS));
strsHead->next=NULL;
STRS*strsTail=NULL;
intput(&strsHead,&strsTail);
return0;
}
voidprfStrs(STRS*strsHead,inttj)//tj=1输出统计结果;tj=0不输出统计结果
{
while(strsHead->next!=NULL)
{
printf("%s ",strsHead->next->str);
strsHead=strsHead->next;
}
if(tj==1)
{
printf("大写字母个数:%d ",dCon);
printf("数字输入个数:%d ",nCon);
}
}
voidcontWord(char*str)
{
intlen=strlen(str),i;
for(i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')
dCon++;
if(str[i]>='0'&&str[i]<='9')
nCon++;
}
}
voidintput(STRS**strsHead,STRS**strsTail)
{
STRS*strsNew;
charc;
while(1)
{
strsNew=(STRS*)malloc(sizeof(STRS));
memset(strsNew->str,0,100);
if(strsNew->str[0]==0)
{
c=0;
c=getchar();
if(c==' ')
{
system("cls");
prfStrs(*strsHead,1);
break;
}
else
{
strsNew->str[0]=c;
}
}


gets(&strsNew->str[1]);
strsNew->next=NULL;
if((*strsHead)->next==NULL)
(*strsHead)->next=strsNew;
else
(*strsTail)->next=strsNew;
*strsTail=strsNew;
contWord(strsNew->str);
}
}

‘贰’ c语言中字符串所占字节数怎么算

在纯ASCII码下,字节数=字符串长度=字符个数,因为每个字符就一个字节。
在Unicode下,字节数/2=字符串长度=字符个数,因为每个字符都是2个字节。
在ASCII码与其它双字节字符系统混用时,字节数=ASCII码字符个数+双字节字符个数*2,
而此时字符串长度到底怎么统计就不好说了,
【有的语言如C语言,此时字符串长度=字节数,】
有的语言如JS,此时字符产长度=字符个数。

‘叁’ 如何使用C语言求解最长公共子字符串问题及相关的算法

假定字符串采用堆分配方式,编写一个程序,求两个字符串S和T的一个最长公共子串

本题的思路:
本题要实现的算法扫描两个字符串。其中index指出最长公共子串在s中的序号,length指出最长公共子串的长度

堆分配存储表示如下:
typedef struct{
char *ch;
int length;
}Hstring;

Status MaxComString(Hstring S,Hstring T,int &length){

index=0;
length=0;
i=0;

//令i作为扫描字符串S的指针
while(i<S.length){
j=0;
//令j作为扫描字符串T的指针
while(j<T.length){
if(s.ch[i]==T.ch[j]){
//找一个子串,其在字符串S中的序号为i,长度为length1
length1=i;
for(k=1;S.ch[i+k]==T.ch[j+k];k++)length1++;
if(length1>length){
//将较大长度值赋给index与length
index=i;
length=length1;
}
j=j+length1;//继续扫描字符串T中第j=length1个字符之后的字符
}else{
j++;
}
}//while
i++;
}//while
printf("最长公共子串:");
for(i=0;i<length;i++)printf("%c",S.ch[index+i]);
return OK;
}

‘肆’ C语言字符串表达式求值

#include<stdio.h>

intmain(void)
{
longlongx;
intt,i,a;
charc;
for(scanf("%d%lld ",&t,&x),i=1;i<=t;i++)
{
while((c=getchar())!=' '&&c!=EOF)
{
scanf("%d",&a);
switch(c)
{
case'+':x+=a;break;
case'-':x-=a;break;
case'*':x*=a;break;
case'/':x/=a;break;
default:break;
}
}
printf("Case#%d:%lld ",i,x);
}
return0;
}

‘伍’ c语言怎么计算字符串的字符个数

一般有三种办法可以计算英文字符的个数:
1)使用strlen()函数
2)从首字符开始,边扫描边计数,到'\0'为止('\0'不计数)
3)从首字符开始,扫描到'\0'为止,'\0'地址与字符串首地址的差。

‘陆’ C语言字符串四则运算的实现!求指导

以前写过一个,支持四则运算以及括号运算,采用栈实现
#include<stdio.h>
#include<malloc.h>
#define null 0
#define max 100
typedef struct date /*定义字符栈*/
{
char sk[max];
int top;
}seqstack;
typedef struct da /*定义数据栈*/
{
int sk[max];
int top;
}stack;
void push(seqstack *s,char x) /*进栈*/
{
if(s->top==max-1)
{
printf("out of space.\n");
}
s->top++;
s->sk[s->top]=x;
}
void spush(stack *s,int x) /*进栈*/
{
if(s->top==max-1)
{
printf("sout of space.\n");
}
s->top++;
s->sk[s->top]=x;
}
char pop(seqstack *s ,char c) /*出栈*/
{
if(s->top==-1)
{
printf("no element.\n");return 0;
}
else
{
c=s->sk[s->top];
s->top--;
return c;
}
}
int spop(stack *s ,int c) /*出栈*/
{
if(s->top==-1)
{
printf("sno element.\n");return 0;
}
else
{
c=s->sk[s->top];
s->top--;
return c;
}
}
int pp(char c) /*判断字符*/
{
switch(c)
{
case '#':return 0;break;
case '+':return 2;break;
case '-':return 2;break;
case '*':return 3;break;
case '/':return 3;break;
case '(':return 1;break;
case ')':return 4;break;
default:return 9;break;
}
}
int yunsuan(int a,char b,int c) /*运算*/
{
switch(b)
{
case '+':return a+c;break;
case '-':return a-c;break;
case '*':return a*c;break;
default:
if(c==0) return 0; //除数为0
return a/c;break;
}
}
char bijiao(seqstack *f,char c) /*比较优先级*/
{
int m,n;
char w;
m=pp(c);
w=f->sk[f->top];
n=pp(w);
if(n<m) return '>';
return '<';
}
void main()
{
int x,s;
int q=0,w=0;
int p=0; /*标示变量*/
char ch,th='\0',d='\0';
seqstack *h;
h=(seqstack*)malloc(sizeof(seqstack));
if(!h) printf("no creat");
h->top=-1;
stack *g;
g=(stack*)malloc(sizeof(stack));
if(!g) printf("no door");
g->top=-1;
push(h,'#');
ch=getchar();
while(ch!='\n')
{
if(pp(ch)==9)
{
if(p>0)
{
x=spop(g,x);
spush(g,10*x+ch-48);
}
else
{
spush(g,ch-48);
p++;
}
}
if(pp(ch)==1)
{ push(h,ch);p=0;}
if(pp(ch)==4)
{
while(pp(h->sk[h->top])!=1)
{
q=spop(g,q);
w=spop(g,w);
th=pop(h,th);
spush(g,yunsuan(w,th,q));
}
d=pop(h,d);p=0;
}
if(pp(ch)!=9&&pp(ch)!=1&&pp(ch)!=4)
{
switch(bijiao(h,ch))
{
case '>':push(h,ch);p=0;break;
case '<':
while(pp(h->sk[h->top])>=pp(ch))
{
q=spop(g,q);w=spop(g,w);
th=pop(h,th);
spush(g,yunsuan(w,th,q));
}
push(h,ch); p=0;break;
}
}
ch=getchar();
}
while(ch=='\n'&&h->sk[h->top]!='#')
{
q=spop(g,q);w=spop(g,w);
th=pop(h,th);
s=yunsuan(w,th,q);
spush(g,s);
}
printf("the answer is %d\n",g->sk[g->top]);
}

‘柒’ c语言计算字符数组的长度

1、在c语言中,可以通过库函数strlen来计算字符串的长度,也可以通过循环计数来求取字符串长度。
函数原型:unsigned
int
strlen(char
*str);

能:统计字符串str中字符的个数,不包含'\0'


值:返回字符个数
2、用strlen函数实现:
char str[20];
int len; // 保存数组的长度
scanf("%s", str);
len = strlen(str); // 计算字符数组str的长度
注:需将头文件#include
添加进源文件中。3、用循环来实现:
char str[20];
int len=0; // 保存数组的长度
scanf("%s", str);
while(str[len] != '\0') // 未检测到结束字符
{
len++; // 统计字符数组str的长度
}

‘捌’ c语言中的字符型的运算。

#include <iostream>

#include <string>

#include <algorithm>

using namespace std;


void k_add(string a, string b, int k)

{

//将长的字符串放在前面

if (a.size() < b.size())

{

string temp = a;

a = b;

b = temp;

}


//对源字符串进行翻转

reverse(a.begin(), a.end());

reverse(b.begin(), b.end());



bool carry = false; //进位

//字符串相加

size_t i = 0;

for (; i < b.size(); i++)

{

if (i < b.size())

{

a[i] += b[i] - '0';

if (carry) a[i] += 1;

carry = false;

if (a[i] >= k + '0')

{

a[i] -= k;

carry = true;

}

}

}


for (; i < a.size(); i++)

{

if (carry) a[i] += 1;

carry = false;

if (a[i] >= k + '0')

{

a[i] -= k;

carry = true;

}

}


if (carry)

{

a.push_back('1');

}

//输出

bool begin = false;

for (int j = a.size() - 1; j >= 0 ; j--)

{

if (a[j] > '0')

{

begin = true;

}

if (begin)

{

cout << a[j];

}

}

cout << endl;

}

简单模拟即可

10进制测试

‘玖’ c语言字符串计算

这就要从字符型数据在内存中的存储方式来解释了。在C语言中,实际上字符型数据在内存中是以二进制形式存放的,并不是真正的把一个字符存进内存里。在对字符型数据进行相加减运算的时候,系统会首先会将char型数据以隐形的方式转化成int型数据再进行相加减运算的。因此,由字符型数据在内存的存储方式来看,字符型数据是可以进行数值运算的,对字符型数据做数字运算实际上就是对字符本身对应的ASSIC码进行相应的数值运算。

‘拾’ 求c语言的字符串逆序输出的递归算法

1.创建一个新的项目和。c文件,输入头和主要功能。

热点内容
正态分布函数c语言 发布:2025-05-11 10:50:38 浏览:392
分类投票源码 发布:2025-05-11 10:46:23 浏览:778
内联汇编程序 发布:2025-05-11 10:46:16 浏览:105
安卓如何设置按压锁屏 发布:2025-05-11 10:33:57 浏览:616
c语言定义体 发布:2025-05-11 10:20:41 浏览:253
linuxwhichis 发布:2025-05-11 10:20:09 浏览:264
花雨庭服务器如何发消息 发布:2025-05-11 10:20:08 浏览:146
安卓系统时间在哪里设置 发布:2025-05-11 10:10:37 浏览:986
我的世界租赁服务器怎么换皮肤 发布:2025-05-11 10:09:59 浏览:949
sql插入两张表 发布:2025-05-11 09:55:33 浏览:758