数组和字符串
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5 //这是题目。
请问 怎么解决多空格问题。求助 判断字符 遇到空格加1 最后'\0'结束再加1. 连续空格做个标记。不就搞定了 str1 = ‘字符串’
num = 1 #统计单词数量
for i in str1:
if i == ' ':
if str1 != ' ':
num += 1
这样可以吗,我是新手,可能用的方法比较low{:5_97:} wqz666 发表于 2019-10-27 10:10
str1 = ‘字符串’
num = 1 #统计单词数量
for i in str1:
你得用c解答 本帖最后由 bin554385863 于 2019-11-2 09:20 编辑
#include <stdio.h>
#include <ctype.h>
void func(char * cstr)
{
int a = 1;
if (!isalpha(*cstr))//首个字符不是子母的情况计数-1
{
a = a - 1;
}
while (*(cstr + 1) != '\0')//指针+1避免数组越界
{
if (!isalpha(*cstr) && isalpha(*(cstr + 1))) /*判断相邻两个字符,如果第一个不是子母且第二个是子母,那么单词的个数就是这两个字符的对数,同时不受字符串中单词之间空格数量的影响,完美解决空格数量的问题;*/
{
a++;
}
cstr++;
}
printf("字符串有%d个单词\n", a);
}
int main(int argc, char * argv[])
{
char * a = "hello";
char * b = "hello world";
char * c = " hello world dffd string C";
func(a);
func(b);
func(c);
return 0;
}
----------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.16299.1087]
(c) 2017 Microsoft Corporation。保留所有权利。
E:\Users\86184\Documents\Code>c:\Users\86184\.vscode\extensions\ms-vscode.cpptools-0.26.0\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-oem4klku.rpa --stdout=Microsoft-MIEngine-Out-2tqayjy5.niw --stderr=Microsoft-MIEngine-Error-d0tasn14.2nt --pid=Microsoft-MIEngine-Pid-nem2dt1f.tmd "--dbgExe=E:\My Program\MinGW\bin\gdb.exe" --interpreter=mi
字符串有1个单词
字符串有2个单词
字符串有5个单词
E:\Users\86184\Documents\Code>
-----------------------------------------------------------------------------------
char * c = " (空h)ello(空w)orld (空d)ffd (空s)tring (空C) ('\0' 数组之外的值 ) ;//最后一项是结束符'\0'它和数组之外的值也构成了一组计数字符组
如果会正则表达式的话,代码还能更简短 wqz666 发表于 2019-10-27 10:10
str1 = ‘字符串’
num = 1 #统计单词数量
for i in str1:
虽然语言不一样但是逻辑都是相同得,这样不是不行,如果第一个单词就是空格呢,若单词之间不止一个空格呢,这样就不准确了 本帖最后由 jackz007 于 2019-10-27 12:38 编辑
#include <stdio.h>
main(void)
{
char s , ch ;
int c , k , m ;
for(m = 0 ; (ch = getchar()) != '\n' && m < 255 ;) s = ch ;
s = '\0' ;
for(k = 0 ; (k < m) && (s == 0x07 || s == 0x20) ; k ++) ;
for(c = 0 ; k < m ; k ++) {
for(; (k < m) && (s != 0x07 && s != 0x20) ; k ++) ;
for(; (k < m) && (s == 0x07 || s == 0x20) ; k ++) ;
c ++ ;
}
printf("%d\n" , c) ;
} 遍历遇见空格直接continue
页:
[1]