#include<stdio.h>
#include<string.h>
int main() {
char m[100],word[9];
int i,j,ans,counts=0,flag;
gets(m); gets(word);
for(i=0;i<strlen(m);i++) {
for(j=i;j<strlen(m);j++) {
if(m[j]==' ') //字串遇到空格結束
{ flag=j; break; }
if(flag<j) flag=strlen(m);
}
ans=1;
for(j=i;j<flag;j++) {
if(m[j]!=word[j-i]) {
ans=0; break; }
}
if(strlen(word)!=flag-i) ans=0;
if(ans==1) counts++;
i=flag;
}
printf("%s %d",word,counts);
return 0;
}
要是有更好更易懂的代碼就太好啦!非常感謝!!!


uj5u.com熱心網友回復:
標題單詞統計
描述
輸入字串string[N](N≤100),各個單詞以空格隔開,單詞長度小于等于8,輸入單詞word[M](M≤8),在string中查找出相同的單詞并統計該單詞出現的次數資訊,輸出單詞和出現次數的資訊, 資料之間空一格空格。主函式輸入字串和待統計單詞,撰寫函式count()實作統計和資訊輸出。
時間限制
1
記憶體限制
10000
類別
1
輸入說明
輸入一行字符以空格隔開各個單詞,輸入要統計的單詞。
輸出說明
格式輸出:輸出單詞及其出現的次數資訊,資料之間空一格。
輸入樣例
dog cat dog dog the abc dog hahe
dog
輸出樣例
dog 4
提示
采用重回圈結構實作計算程序,輸出資料之間空一格。
uj5u.com熱心網友回復:
這是題目以及測驗資料,拜托了謝謝大佬!
uj5u.com熱心網友回復:
樓主的標注修改如下:#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[])
{
char m[100],word[9];
int i,j,ans,counts=0,flag;
gets(m); //字串
gets(word); //需查找的單詞
for(i=0;i<strlen(m);i++){ //回圈的范圍是一個字串的長度
for(j=i;j<strlen(m);j++){
flag=j; //單詞位置下標
if(m[j]==' ') break;//遇到空格,一個單詞的結束位置
//跳出for(j=i;j<strlen(m);j++)回圈
//if(flag<j)
// flag=strlen(m);
}
ans=1; //單詞對比置位
for(j=i;j<flag;j++){ //i是單詞開始位置,flag為單詞結束位置
if(m[j]!=word[j-i]){ //將m[j]開始的單詞與word[j-i]的單詞作比較,j++ <->j-i
ans=0; //如果不同,則ans置0
break; //跳出回圈
}
}
if(strlen(word) != flag-i) ans=0;//判斷m[]字串中出現如 abc ,而word[]=abcd,上一步判斷是能通過的。
if(ans==1) counts++; //以上條件滿足,計數加1
i=flag; //將一個單詞的結尾位置給i,直接進入下一個單詞的分析。
}
printf("%s %d",word,counts);
return 0;
}
指標的寫法,按題目用函式,如下供參考:
#include <stdio.h>
int count_SubStr(char *src,char *sub);
int main(int argc, char* argv[])
{
char *src = new char[100],*sub = new char[10];
int c;
gets(src);
gets(sub);
c = count_SubStr(src,sub);
printf("%s %d\n",sub,c);
return 0;
}
int count_SubStr(char *src,char *sub)
{
char *p,*pos,*t;
int c=0,flag,charlen=strlen(sub);
p=src;
while(*p != '\0')
{
flag=0;
while(*p != ' ' && *p != '\0'){
p++;
flag++;
}
if(charlen == flag){
t = p;
while(flag--) t--;
flag = 0;
pos = sub;
while(*t == *pos && *pos != '\0'){t++;pos++;flag++;}
if(charlen == flag) c++;
}
p++;
}
return c;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/246679.html
標籤:C語言
上一篇:請問如何把上次生成發生錯誤
