思路是先把要找的和待找字串都讀入,然后用兩個for回圈來一個一個字符比。一個for用來移動第一個比的字符,一個for用來比較從第一比較的字符開始后面的是否相同,然后判斷后輸出。現在問題是怎么樣它都只輸出-1,望大神指點,奉代碼如下:
#include<stdio.h>
#include<string.h>
int main(){
int q=0,i,j,k,l,first;
char a[1000000],b[11];
scanf("%s",b);
getchar();
gets(a);
k=strlen(a);
l=strlen(b);
for(i=0;i<k-l;i++){
for(j=0;j<l;j++){
if((a[i+j]!=b[j])&&(a[i+j]!=b[j]+32||a[i+j]!=b[j]-32)){ //大小寫不分
j--; //這里為了排除一種情況:最后一個字符相等結束回圈或不等break跳出j的值一樣。所以加了一個j--,反正j后面也沒有用
break;
}
}
if(j==l-1){
if(q==0)//記錄第一次出現的位置
first=i;
q++;
}
}
if(q==0)
printf("-1");
else{
printf("%d %d",q,first);
}
return 0;
}
uj5u.com熱心網友回復:
#include<stdio.h>
#include<string.h>
#include <ctype.h>
void str_to_lower(char *str)
{
int i = 0;
while (str[i]) {
if (isupper(str[i]))
str[i] = str[i] + 32;
i++;
}
}
int main()
{
static char str[100000];
char substr[16];
int i, j, k;
int first = -1, cnt = 0;
fgets(str, sizeof(str), stdin);
scanf("%s", substr);
str_to_lower(str);
str_to_lower(substr);
i = 0;
while(str[i]) {
for (j = 0; substr[j] && str[i+j]; j++) {
if (substr[j] != str[i+j])
break;
}
printf("i = %d\n", i);
if (substr[j] == '\0') {
if (first == -1)
first = i;
cnt++;
}
if (j != 0)
i += j;
else
i++;
}
if (first == -1)
printf("-1");
else
printf("%d %d", cnt, first);
/*
int q=0,i,j,k,l,first;
char a[1000000],b[11];
scanf("%s",b);
getchar();
gets(a);
k=strlen(a);
l=strlen(b);
for(i=0;i<k-l;i++){
for(j=0;j<l;j++){
if((a[i+j]!=b[j])&&(a[i+j]!=b[j]+32||a[i+j]!=b[j]-32)){ //大小寫不分
j--; //這里為了排除一種情況:最后一個字符相等結束回圈或不等break跳出j的值一樣。所以加了一個j--,反正j后面也沒有用
break;
}
}
if(j==l-1){
if(q==0)//記錄第一次出現的位置
first=i;
q++;
}
}
if(q==0)
printf("-1");
else{
printf("%d %d",q,first);
}
*/
return 0;
}
供參考~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/250885.html
標籤:新手樂園
上一篇:Qt怎樣在主視窗自動彈出子視窗
