输出字符串中最长的单词,不知道哪里错了
#include
#include
int main(){
char str[100];
printf("输入字符串:");
gets(str);
printf("最长的单词是:");
int i;
int letter(char c);
int longest(char arr[]);
for(i=longest(str);letter(str[i]);i++){
printf("%c",str[i]);
}
return 0;
}
int letter(char c){ //判断是否是英文字母
if(c>='a'&&c<='z'||c>='A'&&c<='Z') return 1;
else return 0;
}
int longest(char arr[]){
int flag=1;//表示将要读入的字母是起始位置的
int i;
int point=0;//表示当前单词的起始下标
int num=0;//表示当前单词累计的字母个数
int maxlength=0;//表示最长单词的长度
int place=0;//表示最长单词的起始位置
for(i=0;i<strlen(arr);i++){
if(letter(arr[i])){
if(flag){
point=i;
flag=0;
}
num++;
}
else {
flag=1;
if(num>=maxlength){
maxlength=num;
place=point;
}
num=0;
}
}
return place;
}
int longest(char arr[]) {
int i = 0, start = 0, max_len = 0, max_start = 0;
int len = strlen(arr);
while (i < len) {
while (i < len && isspace(arr[i])) {
i++;
}
start = i;
while (i < len && !isspace(arr[i])) {
i++;
}
int word_len = i - start;
if (word_len > max_len) {
max_len = word_len;
max_start = start;
}
}
return max_start;
}
参考GPT和自己的思路:
你好,这段代码存在若干问题。首先,gets()函数已经被标记为不安全并可能产生缓冲区溢出,不建议使用。建议改用fgets()函数。另外,最长单词的长度应该是maxlength+1,因为需要包括字符串末尾的空字符。最后,在输出最长单词时应该用循环打印,而不是只打印单个字母。
下面是修改后的代码:
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
int main() {
char str[MAX_LENGTH + 1];
printf("输入字符串:");
fgets(str, MAX_LENGTH + 1, stdin);
printf("最长的单词是:");
int i;
int letter(char c);
int longest(char arr[]);
int start = longest(str);
for (i = start; letter(str[i]); i++) {
printf("%c", str[i]);
}
printf("\n");
return 0;
}
int letter(char c) { //判断是否是英文字母
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
return 1;
else
return 0;
}
int longest(char arr[]) {
int flag = 1; //表示将要读入的字母是起始位置的
int i;
int point = 0; //表示当前单词的起始下标
int num = 0; //表示当前单词累计的字母个数
int maxlength = 0; //表示最长单词的长度
int place = 0; //表示最长单词的起始位置
for (i = 0; i < strlen(arr); i++) {
if (letter(arr[i])) {
if (flag) {
point = i;
flag = 0;
}
num++;
}
else {
flag = 1;
if (num >= maxlength) {
maxlength = num;
place = point;
}
num = 0;
}
}
return place;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<iostream>
using namespace std;
int main()
{
int m = 0123, n = 123;
printf("%o %o\n", m, n);
return 0;
}
程序运行后的输出结果是()
A 0123 0173
B 0123 173
C 123 173
D 173 173
正确答案:C
这题就是C语言常见进制的表示形式以及打印格式化数据的方式
二进制: 101b
八进制:0123 printf打印时 %o
十进制: 101 printf打印时 %d
十六进制:0x123 printf打印时 %x
m是八进制,所以直接打印123
以下程序的运行结果是()
int main()
{
printf("%s , %5.3s\n", "computer", "computer");
return 0;
}
A computer, puter
B computer, com
C computer, computer
D computer, compu.ter
正确答案:B
这题考点与上面类似,也是打印格式化的数据
%m.ns,m表示宽度,n表示打印字符的个数,右对齐,不足补空格,当n大于m时直接打印n个字符。-m就是左对齐,还有%04d右对齐打印,宽度为4,不足补0