首页 > 试题广场 >

字符串最后一个单词的长度

[编程题]字符串最后一个单词的长度
  • 热度指数:1554998 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾

输入描述:

输入一行,代表要计算的字符串,非空,长度小于5000。



输出描述:

输出一个整数,表示输入字符串最后一个单词的长度。

示例1

输入

hello nowcoder

输出

8

说明

最后一个单词为nowcoder,长度为8   
推荐
/*使用动态数组来做,输入的字符串依次存入数组中,
最后返回数组中最后一个元素(字符串)的长度*/
#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main(){
	string input;
	vector<string>arr;
    while(cin>>input){
    	arr.push_back(input);
	}
	cout<<arr[arr.size()-1].length()<<endl;		
	return 0;
}

编辑于 2016-08-29 14:07:27 回复(93)
#include <stdio.h>
#include <string.h>
int main() {
   char x;
   int count=0,y=0;
   char k[100]={0};
   if (fgets(k, sizeof(k), stdin) != NULL) {
        //printf("You entered: %s",k);
    }
    //printf("\n");
    for(int i = 0;i<sizeof(k);i++)
    {
        count++;
        if(k[i] == ' ')
        {
            count=0;
        }
        if(k[i+1] == '\n')
        {
            break;
        }
    }
    printf("%d",count);
}
发表于 2024-11-19 23:19:13 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    int a, b,i,j,k,m,n=0;
    char c[5000],t='0';
    gets(c);
    m=strlen(c);
    for(i=0;i<m;i++){
        if(c[i]==' '){
            t=c[i];
            
            n=i;
        }
    }
    if(t=='0'){
        k=m-n;
    }
    else{
        k=m-n-1;
    }
    
    printf("%d\n",k);
    
    return 0;
}

发表于 2024-11-09 09:13:13 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char arr[5000];
    fgets(arr, sizeof(arr), stdin);
    printf("%d\n", (int)strlen(strrchr(arr, ' ')) - 2);
    return 0;
}
发表于 2024-11-08 12:53:04 回复(0)
 无循环版本。注意fgets返回的字符串含有换行符,所以长度要减一;此外strrchr返回的字符串以空格为开头,所以长度也要减一。
#include <stdio.h>
#include <string.h>

char str[5001];

int main()
{
    fgets(str,sizeof(str),stdin);
    char* p=strrchr(str,' ');
    int l=p?strlen(p)-1:strlen(str);
    printf("%d",l-1);
    return 0;
}


发表于 2024-08-17 05:20:55 回复(0)
#include <stdio.h>

int main() {
    int count = 0;
    char tmp;
    while (scanf("%c", &tmp) && tmp != '\n') {
        count = tmp != ' '? count + 1 :  0;
    }
    printf("%d", count);
    return 0;
}
发表于 2024-08-10 12:28:02 回复(0)

#include<stdio.h>
int main(){
   char ch=0
   int str_len=0
   while(1){
    ch=getchar();
    if(ch=='\n')
        break;
       else if(ch==''){
           str_len=0
           }else{
           str_len++;
       }
   }
    print("%d\n",str_len)
    return 0
    }


发表于 2024-07-26 13:54:34 回复(0)
//题目提到了不以空格结尾,而且标点符号不是单词,所以统统不用考虑
#include <stdio.h>
int main() {
    char ch = 0;
    int str_len = 0;
    while (1) {
        ch = getchar();
        if (ch == '\n')
            break;
        else if (ch == ' ') {
            str_len = 0;
        } else {
            str_len++;
        }
    }
    printf("%d\n", str_len);
    return 0;
}
发表于 2024-07-23 16:28:23 回复(0)
#include <stdio.h>
#include <string.h>
int main()
{    char a[5000];
    int num;
    while(scanf("%s",a)!=EOF){
        num=strlen(a);}
    printf("%d\n",num);
    return 0;
}
发表于 2024-07-17 12:16:00 回复(0)
直接通过EOF找最后输入的一段字符串,然后再利用strlen()函数算长度就行了
#include <stdio.h>
#include <string.h>
#define N 5000

int main() {
    int a, b;
    char str[N];
    while (scanf("%s", &str) != EOF) { // 注意 while 处理多个 case
        a = 0;
    }
    a = strlen(str);
    printf("%d", a);
    return 0;
}


发表于 2024-07-10 01:18:28 回复(0)
#include <stdio.h>
int main() {
     char a;
    int num=0;
    while(scanf("%c",&a)&&a!='\n'){
        if(a==' '){num=0;}
        else {num++;}
    }
    printf("%d",num);
    return 0;
}
有没有更快的方法
发表于 2024-06-06 21:30:38 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char sentence[5000];
    while(scanf("%s", sentence) != EOF){}
    printf("%d", strlen(sentence));
    return 0;
}
发表于 2024-05-31 15:10:11 回复(0)
#include<stdio.h>
#include<string.h>
void tets(char p[], int length) {

    char* q = p + length - 1;
    while (*q != ' ') {
        q--;
    }
    char* r = q + 1;
    int i = 0;
    while (*r != '\0') {
        i++;
        r++;
    }
    printf("%d\n", i);
}
void test() {
    char p[5000];
    gets(p);
    int length = strlen(p);

    char* h = p;
    int j = 0;
    int w = 0;
    while (*h != '\0') {
        if (*h != ' ')
            j++;
        if (*h == ' ')
            w = 1;
        h++;

    }
    if (w == 0)
        printf("%d\n", j);


    else if (w == 1)
        tets(p, length);

}


int main() {
    test();
    return 0;
}
发表于 2024-05-22 11:53:54 回复(0)
真的很省事
 #include<stdio.h>
  2 #include<string.h>
  3 int main(int argc,char *argv[]){
  4     //运行时输入./helloworld  hello world
  5     //argc = 3,argv[2] = world
  6     //输入hello world,输出argv[]i
  7     int a = 0;
  8     for(int i = 1; i < argc; i++){
  9         printf("%s ",argv[i]);
 10         a = strlen(argv[i]);
 11     }
 12     printf("\n");
 13     printf("%d\n",a);
 14     return 0;
 15 }

发表于 2024-04-24 11:58:55 回复(1)
#include<stdio.h>
#include<string.h>

int main(void) {
    char ch;
    int i, len=0;
    
    while(1){
    	ch=getchar();
		if(ch!=' '){
			len++;
		}
		else if(ch==' '){
			len=0;
		}    	
    	if(ch=='\n')
    	break;
	}
	
	
	printf("%d",len-1);
	
    return 0;
}
编辑于 2024-03-27 18:29:49 回复(0)
原有思路:
一组单词输入后,利用strlen()函数获得该组单词的长度,并从最后一位开始向前扫描,扫描到空格后停下,此长度为字符串最后一个单词的长度,需要注意的点有两个:
(1)不能利用scanf()函数,或者说,不能直接利用scanf()作为输入,因为其只能输入该字符串的第一个单词,可以改用fgets()
(2)需要考虑仅有一个单词的情况
#include <stdio.h>
#include <string.h>
int main() {
    int LastWordLen = 0;
    int WordsLen;
    char Words[5000];
    fgets(Words, 5000, stdin);
    // scanf("%s", Words);
    WordsLen = strlen(Words);
    // printf("%d\n", WordsLen);
    for (int i = 0; i < (WordsLen - 2); i++) {
        if (Words[WordsLen - 2 - i] != ' ')
            continue;
        else
            LastWordLen = i;
        break;
    }
    if (0 == LastWordLen)
        LastWordLen = WordsLen - 1;
    printf("%d\n", LastWordLen);
    return 0;
}
【他山之玉】
#include <stdio.h>
#include <string.h>

int main()
{
    char str[1000];
    int a=0,i=0;

    while(scanf("%s",str) != EOF)
    {}
    a=strlen(str);
    printf("%d",a);
}
1,scanf()函数,如果转换说明是%s的话,他的读取规则是,“读取除空白以外的所有字符串”。scanf()函数跳过空白开始读取第一个非空白字符,并保存非空白字符直到再次遇到空白字符。也就是说!!!!scanf()函数根据%s转换说明读取一个单词!!!
2,EOF,EOF是stdio.h文件里定义的特殊值,通常情况下#define指令会把EOF定义为“-1”,当scanf()读取到文件结尾时,就会返回EOF(如果是转换说明错误好像是会返回“0”)


编辑于 2024-03-25 19:45:39 回复(0)
#include <iostream>
#include <stdio.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;

int main(int argc, char** argv) {
    char a[5000]={0};
    gets(a);
    int l,i=0;
    l=strlen(a);
    while(a[l-1]!=' ')
    {
        i++;
        l--;
    }
    printf("%d",i);
    return 0;
}

编辑于 2024-03-07 17:02:32 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char a[5000]={0};
    gets(a);
    int l,i=0;
    l=strlen(a);
    while(a[l-1]!=' ')
    {
        i++;
        l--;
    }
    printf("%d",i);
    return 0;
}


发表于 2024-03-05 22:13:15 回复(0)
#include <stdio.h>
#include <string.h>

int main()
{   char str[5002]={0};
    gets(str);
    int len=strlen(str);
    int result=0;
    for(int i=len-1;i>=0;i--)/*逆序遍历,没读到空格时累加数加一,读到空格时结束累加*/
    {
        if(str[i]!=' ')
        {
            result++;
        }
        else
        {
            break;
        }
    }
    printf("%d",result);
    return 0;
}
发表于 2024-01-03 17:59:03 回复(0)