#include<stdio.h> #include<string.h> int main() { char s1[100],s2[100]; scanf("%s%s",&s1,&s2); int i=0,c=0; int l1=strlen(s1),l2=strlen(s2); for(i=0;i<=l1-l2;i++) { if(strncmp(s1+i,s2,l2)==0)c++; } printf("%d",c); return 0; }这段代码有什么问题
时间: 2023-12-02 14:05:42 浏览: 79
这段代码存在以下问题:
- 在使用 scanf 读取字符串时,应该使用 %s 而不是 &s1 和 &s2。
- 在使用 strncmp 函数时,应该将第一个参数改为 s1+i,而不是 s1。
- 在使用 strncmp 函数时,应该将第三个参数改为 l2+1,以包含字符串末尾的空字符。
- 在最后输出结果时,应该换行以避免输出在同一行。
改正后的代码如下:
```c
#include <stdio.h>
#include <string.h>
int main() {
char s1[100], s2[100];
scanf("%s %s", s1, s2);
int i = 0, c = 0;
int l1 = strlen(s1), l2 = strlen(s2);
for (i = 0; i <= l1 - l2; i++) {
if (strncmp(s1 + i, s2, l2 + 1) == 0) {
c++;
}
}
printf("%d\n", c);
return 0;
}
```
相关问题
阅读程序,输出结果: #include <stdio.h> #include <string.h> int main() { char s1[]="Hello World"; char s2[80]; strcpy(s2, s1); puts(s2); return 0; }
这个程序的输出结果是:
Hello World
这个程序定义了两个字符数组 `s1` 和 `s2`。`s1` 数组被初始化为字符串 "Hello World",`s2` 数组没有被初始化,所以其内容是不确定的。然后程序调用了 `strcpy()` 函数将 `s1` 数组中的字符串拷贝到 `s2` 数组中。最后程序调用了 `puts()` 函数将 `s2` 数组中的字符串输出到终端上。由于 `s2` 数组中的内容是从 `s1` 数组中拷贝过来的,因此最终程序输出 "Hello World"。
请解释#include <stdio.h> #include <string.h> #define M 100 #define N 10 void main() { char s1[M],s2[N]; int i,j; gets(s1); gets(s2); i=strlen(s1); for(j=0;j<=strlen(s2);i++,j++) s1[i]=s2[j]; s1[i]='\0'; puts(s1); }
这是一段 C 语言代码,实现的功能是将两个字符串拼接起来。
首先,代码中使用了两个头文件,分别是<stdio.h>和<string.h>,前者提供了输入输出的函数,后者提供了字符串操作的函数。
然后,定义了两个宏,M 和 N,分别表示字符串的最大长度和第二个字符串的长度。
接下来是主函数main(),其中定义了两个字符数组s1和s2,分别用来存放输入的两个字符串。使用函数gets()获取两个字符串。
接下来使用函数strlen()获取第一个字符串的长度,并将第二个字符串拼接到第一个字符串的末尾。具体实现是使用一个循环,将s2中的字符一个一个复制到s1的末尾。
最后,为s1添加字符串结束符'\0',并使用函数puts()输出拼接后的字符串。
需要注意的是,这段代码使用了过时的函数gets(),在实际使用中可能会存在安全问题,建议使用更安全的函数fgets()代替。同时,主函数应该声明返回值类型为int而不是void。
阅读全文