c语言设s、t为两个字符串,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出-1
时间: 2023-06-04 07:02:44 浏览: 449
你好!关于你的问题,我可以帮你解答。以下是 c 语言的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char s[100], t[100];
int i, j, len_s, len_t;
printf("请输入字符串 s 和 t:\n");
scanf("%s%s", s, t);
len_s = strlen(s);
len_t = strlen(t);
for (i = 0; i <= len_s - len_t; i++) {
for (j = 0; j < len_t; j++) {
if (s[i+j] != t[j]) break;
}
if (j == len_t) {
printf("%d\n", i);
return 0;
}
}
printf("-1\n");
return 0;
}
```
这段代码可以接收两个字符串 s 和 t,并判断 t 是否为 s 的子串。如果是,输出子串在 s 中的位置,否则输出 -1。
希望我的回答能帮助到你!如果你有其他问题,欢迎提出。
相关问题
设s、t为两个字符串,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出-1。的c语言的具体代码
以下是C语言代码:
```
#include <stdio.h>
#include <string.h>
int main() {
char s[100], t[100];
int i, j, flag;
printf("请输入字符串s:\n");
gets(s);
printf("请输入字符串t:\n");
gets(t);
for(i = 0; i <= strlen(s) - strlen(t); i++) {
flag = 1;
for(j = 0; j < strlen(t); j++) {
if(s[i + j] != t[j]) {
flag = 0;
break;
}
}
if(flag == 1) {
printf("子串所在位置为:%d\n", i + 1);
return 0;
}
}
printf("-1\n");
return 0;
}
```
解释一下代码:先输入两个字符串s和t,然后用两重循环逐个比较s中从i开始与t相同长度的子串是否与t完全相同,如果是的话,输出子串所在位置i+1,否则输出-1。
设s、t 为两个字符串,两个字符串分为两行输出,判断t 是否为s 的子串。如果是,输出子串所在位置(第一个字符,字符串的起始位置从0开始),否则输出-1用c语言实现
以下是使用C语言实现判断t是否为s的子串的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char s[1000], t[1000];
fgets(s, 1000, stdin);
fgets(t, 1000, stdin);
int s_len = strlen(s);
int t_len = strlen(t);
// 去除字符串s和t中的换行符
if (s[s_len - 1] == '\n') {
s[s_len - 1] = '\0';
s_len--;
}
if (t[t_len - 1] == '\n') {
t[t_len - 1] = '\0';
t_len--;
}
int i, j;
for (i = 0; i <= s_len - t_len; i++) {
for (j = 0; j < t_len; j++) {
if (s[i + j] != t[j]) {
break;
}
}
if (j == t_len) {
printf("%d\n", i);
return 0;
}
}
printf("-1\n");
return 0;
}
```
该程序使用 `fgets` 函数读取两个字符串,然后使用双重循环判断字符串t是否为字符串s的子串。如果是子串,就输出子串所在位置;否则输出-1。