你会读到两个字符串,每个字符串占据一行,每个字符串长度均小于10000,而且第一个字符串的长度小于第二个字符串,你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置如果找不到输出-1,第一个字符的位置为0,第一个字符串在第二个字符串的位置不止一处,字符串中可以含有空格,两个字符串长度一定大于0。用c语言实现
时间: 2023-06-20 22:04:53 浏览: 108
以下是使用 C 语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str1[10000], str2[10000];
fgets(str1, 10000, stdin); // 读取第一个字符串
fgets(str2, 10000, stdin); // 读取第二个字符串
int len1 = strlen(str1) - 1; // 去除换行符
int len2 = strlen(str2) - 1; // 去除换行符
int i, j, k, found = 0;
for (i = 0; i <= len2 - len1; i++) {
for (j = 0, k = i; j < len1; j++, k++) {
if (str1[j] != str2[k]) {
break;
}
}
if (j == len1) {
printf("%d ", i);
found = 1;
}
}
if (!found) {
printf("-1");
}
return 0;
}
```
解释如下:
1. 首先定义两个字符串 `str1` 和 `str2`,使用 `fgets()` 函数依次读取两个字符串,注意每个字符串的长度是小于10000的,因此使用 `fgets()` 函数读取时应该限制读取的最大字符数为 10000。
2. 使用 `strlen()` 函数获取两个字符串的长度,注意要减去换行符。
3. 使用两个循环嵌套从前往后遍历第二个字符串中的每一个字符,判断是否与第一个字符串中的字符相同,如果不相同则跳出循环。
4. 如果第一个字符串中的每一个字符都在第二个字符串中找到了对应的位置,则说明该位置是第一个字符串在第二个字符串中出现的位置,输出该位置。
5. 如果循环结束后还没有找到任何一个匹配的位置,则说明第一个字符串在第二个字符串中不存在,输出 -1。
注意:如果两个字符串中含有空格,使用 `fgets()` 函数读取时会将空格也读入字符串中。
阅读全文