⑴ 初學編程,大家幫忙看下這道c語言題怎麼做萬分感謝
第一題審題關鍵:題目中的轉換規則就是字母在數組中第一次出現的順序(順序是從0開始自增)。
(注意數字是自增數(重復字母不自增,不同字母才自增),不是第一次出現的下標,因為題目有條件:使用數字的最大值等於轉換規則的數目-1)
因此代碼需要實現以下功能:
一、數組輸入,需要有驗證(驗證輸入的是否是小寫,可嵌套循環判斷)。
二、遍歷數組,生成規則列表,可用數組char B[10]和int C[10]來記錄規則,B數組是字母,C是該字母對應的順序(順序用變數自增)。比如數組char A[10]={a,b,a,d,e,f,d,g,j,k};循環每個元素,和數組B中對比,存在就跳過,不存在就將該字母記錄到B中,並將順序變數自增後記錄到C數組對應的下標元素。
三、循環AB兩個數組,通過對比,把數組A中元素替換成對應C中數字(或用新數組a來保存替換結果,原因見下)。
(注意:A是字元數組,c是整型數組,把數字直接存放到A,列印輸出的時候按整型列印,實際就是把數字當成ASCII碼保存了,列印數字就列印ASCII碼。或者一開始就把A定義成字元串數組,最後把數字用ltoa()轉換成字元串再存放到A中,列印用%s格式列印)。
如要接第二題整型a數組,這里可直接把對比結果保存在int a[10]數組中(和原數組A分開)。這樣a可直接用於第二題。
第二題審題:根據上題的a內容定義n個數組(n=a中最大值-a中最小值+1),之後按照題目要求填充這幾個數組,最後列印即可
⑵ C語言編程 判斷字元串中「ab」字元串數,要求用函數實現
#include <stdio.h>
#include <string.h>
void delete1(char s[],char t[])
{
int i,j,k;
int flag=0;
//一:代碼缺陷
//增加判斷。應該
if(!s || !t)
{
return;
}
if(strlen(s) < strlen(t))
{
return;
}
for( i=j=0; s[i]!='\0';i++)
{
for( k=0; t[k]!='\0';k++)
{
if(s[i+k]==t[k]) flag=1;
else
{
flag=0;
break;
}
}
//二,邏輯錯誤
/*if(flag)
{
s[j++]=s[i+k];
i=i+k+1;
} */
//改成
if(flag)
{
strcpy(&s[i], &s[i + k]);
}
//if(!flag) s[j++]=s[i];
if(!flag) continue;
}
//s[j]='\0';
printf("%s\n",s);
}
main()
{
char str1[255],str2[255];
printf("please input the article:\n");
gets(str1);
printf("please input the words you want to delete:\n");
gets(str2);
delete1(str1,str2);
}