當前位置:首頁 » 操作系統 » 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文件,輸入頭和主要功能。

熱點內容
舒聽瀾卓禹安書名叫什麼 發布:2025-05-11 12:36:44 瀏覽:266
java開發web應用 發布:2025-05-11 12:35:51 瀏覽:694
鯊魚影視怎麼緩存電視 發布:2025-05-11 12:35:48 瀏覽:548
ios小項目源碼 發布:2025-05-11 12:35:47 瀏覽:754
為什麼打開的三菱程序不能編譯 發布:2025-05-11 12:16:40 瀏覽:21
ftp定價是怎麼回事 發布:2025-05-11 12:09:18 瀏覽:334
android敏捷開發 發布:2025-05-11 11:56:49 瀏覽:80
腳本pon 發布:2025-05-11 11:52:27 瀏覽:826
ct5推薦哪個配置 發布:2025-05-11 11:47:45 瀏覽:742
領購未上傳發票 發布:2025-05-11 11:43:27 瀏覽:717