c语言-C语言求助,统计出一个字符串中的单词数

问题描述

C语言求助,统计出一个字符串中的单词数

/*7.编写一个函数,统计出一个字符串中的单词数,
将每个单词存起来,并且返回最长单词。
函数原型定义如下:char * word ( char * str ) ;*/
#include
#include
char *word(char *str)
{
int i=0,maxi,j=0,k=0,flag=0;
int s,t;
char *p[100];
while(str[j]!='')

{
if(str[j]==' ')
{
str[j]='';//遇空格,在串尾加“",为什么运行到这里就出错??
flag=0;
if( str[j+1]!='')
k++;
}
else flag++;
if(flag==1)
{
p[k]=&str[j];
}
j++;
}
for(i=0;i
{
t=strlen(p[i]);
if(t>s);
s=t;
maxi=i;
}
return(p[maxi]);
}

void main()
{
char *s="hellow world!welcome to my country";
char *t=word(s);
printf("%sn",t);
}
这个哪里有问题??

解决方案

这题不是你这个思路,我只给你提示这题用到字典树。


解决方案二:

 str[j]='';//遇空格,在串尾加“",为什么运行到这里就出错??   这个不能修改,因为str是字符串常量,不能在修改
 if(t>s);  s没有初始化,存在风险

 可以看见
 http://zhidao.baidu.com/link?url=AjOrX6WoqPjy26J7WfWRnAEoy7sAg1vm5TfEY_FdVOAKEveM81PuApyX2FrA5GF-HIJ8z-t3vYvyVAc81wnNUtUNB9EHQQHHNXx3S3W8_s3
 的源代码

解决方案三:

不知道你这题对单词的定义是不是只是连在一起的字母就算单词,如果不是的话,那你应该有一个字典树,然后你要拿你的字符串中的每一个单词取匹配。
如果是的,你写的代码只能以空格区分单词,肯定是不对的。比如字符串“word&I AM---123--FEEL321 45"你就没法处理。你得考虑字符串里面有数字和符号的情况。
最后回答你程序里面提出的那个问题。因为你是直接对你的字符串进行操作,那么如果你在字符串后面加上"",那之后你就没法获取后面的字符了。所以你需要一个新的字符串去储存你取出的单词,然后在新的字符串的末尾加上“”,这样你才可以继续读取原字符串后面的字符。建议你用gdb设置断点自己debug一下就能看到了。或者你写一个小的test程序专门试一下字符串的分割就明白了。

时间: 2024-11-01 15:43:12

c语言-C语言求助,统计出一个字符串中的单词数的相关文章

java-给HTTP链接的一个字符串中删除空白

问题描述 给HTTP链接的一个字符串中删除空白 我想发送一个查询的url: String url = String.format( "http://xxxxx/xxx/xxx&message=%s",myEditBox.getText.toString()); // Create a new HttpClient and Post Header DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost ht

[搜狗] 找一个字符串中包含全部出现字符的最小字符串

一个字符串中含有n个字符,其中有m个不同的字符,n>>m,用最少的时间和空间找到包含所有这m个字符的最短的字串,不考虑特殊字符,只考虑字母数字即可. 例如: abccbaddac,返回:cbad aabcadbbbcca,返回:bcad 实现代码: #include <iostream> using namespace std; void Search(char input[], char output[]); int main() { char* input = "ab

求一个字符串中连续出现次数最多的子串

解题思路 例如字符串"abababc",最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab.两个题目的解法有些类似,都用到了后缀数组这个数据结构.求一个字符串中连续出现的次数最多的子串,首先生成后缀数组例如上面的字符串为: abababc bababc ababc babc abc bc c 可以看出第一个后缀数组和第三个后缀数组的起始都为ab,第5个后缀数组也为ab.可以看出规律来,一个字符串s,如果第一次出现

nsstring-从一个字符串中得到末尾字符串

问题描述 从一个字符串中得到末尾字符串 从/Application/Mobile/Lib/123.abc中获取123.abc.123.abc的长度不是固定的. 应该怎么做? 解决方案 NSString *fileName=[str lastPathComponent]; 解决方案二: 使用NSString的lastPathComponent方法 NSString *myString = @""/Application/Mobile/Lib/123.abc"";NSS

java-怎么判断一个字符串中含有几个文件名

问题描述 怎么判断一个字符串中含有几个文件名 比如"速查笔记.doc,说明.txt,这是测试啊啊啊啊啊啊啊.txt,dd,s.33.txt".文件名中可以包含 逗号,句号等字符,所以不能用逗号和句号分割.那么难道是判断后缀名吗,但是后缀名何其多. 啊.请问有人有方法吗 解决方案 此题无解!因为txt.txt,txt.txt你说是几个文件?也可能是一个,也可能是两个,这个连伟大的人类都无法区分开,因为你统计的时候,用逗号做分隔符,就导致了,将来无法把他们再次分开,就算比尔盖茨来也不可能有

java如何判断一个字符串中是否有@符号

问题描述 java如何判断一个字符串中是否有@符号 java如何判断一个字符串中是否有@符号 用if语句怎么判断 解决方案 if(str.contains("@")) 解决方案二: Java中怎样判断一个字符串是否为数字java 判断一个字符串中的字符是否唯一java判断一个字符串是否为空的方法 解决方案三: 用正则表达式就可以做到吧, String regex="w+@w+(.w{2,3})*.w{2,3}" 这个是用正则表达式判断输入邮箱格式的 用str.mat

c++-帮忙看看这个代码为什么会超时,有没有什么修改办法(一个字符串在另一个字符串中出现的次数)

问题描述 帮忙看看这个代码为什么会超时,有没有什么修改办法(一个字符串在另一个字符串中出现的次数) #include #include using namespace std; int main() { char str1[100]; char str2[100]; while (1) { cin>>str1; cin>>str2; int a=strlen(str1); int b=strlen(str2); int j,i,count=0; for(j=0;j<a;j++

c++的问题-统计一个字符串在另一个字符串中出现的次数

问题描述 统计一个字符串在另一个字符串中出现的次数 用C++程序 我是新手#include还没有学过 解决方案 int FindSubString(char* strSrc, const char* strSub) { char *cp = NULL; int i = 0; while(1) { if(NULL != (cp = strstr(strSrc, strSub))) { strSrc = ++cp; i++; } else { break; } } return i; } int m

经典算法面试题目-判断一个字符串中的字符是否唯一(1.1)

题目: Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures? 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构. (即只使用基本的数据结构) 解答: 首先,你可以问面试官,构成字符串的字符集有多大?是ASCII字符,还是只是26个字母? 还是有更大的字符集,对于不同