我正在尝试删除字符串之间的空格,并使用isalpha()函数打印出第一个单词。
打印时,只打印出第一个字母。例如“你好大熊猫”我得到“hhhhh”,但我想要用“hello”这个词来代替
int main()
{
char inputString[]={"hello big panda"};
int k=0;
int i=0;
do
{
inputString[i];
i++;
}
while (inputString[i]=isalpha(inputString[i]));
for(i=0; inputString[i] !='\0' ;i++)
{
for (k=i; inputString[k] != '\0'; k++)
{
inputString[k] =inputString[i];
}
}
printf("%s", inputString);
return 0;
}
完成了这个:
int printfirstword(char sentence[])
{
int k=0;
int i=0;
while (isalpha(sentence[i])) //checking for the first blank space
{
i++;
}
sentence[i] = '\0';
printf("%s\n", sentence);
return 0;
}
int main()
{
char sentence[100];
int wordNumber;
char answer;
printfirstword("Hello there")
return0;
}
但我不想更改传递给它的字符串
答案 0 :(得分:3)
您可以简单地使用while
循环而不是do-while
。您只需递增i
,直到找到第一个空格的索引。然后使用i
的值,您可以在字符串中插入'\0'
。输出它,你就完成了。 :)
#include <stdio.h>
#include<ctype.h>
int main()
{
char inputString[]={"hello big panda"};
int k=0;
int i=0;
while (isalpha(inputString[i])) //checking for the first blank space
{
i++;
}
inputString[i] = '\0';
printf("%s", inputString);
return 0;
}
如果您想保留原始字符串,那么您只需创建一个新字符串newStr
然后
while (isalpha(inputString[i])) //checking for the first blank space
{ newStr[i]=inputString[i]; //copy first word into newStr
i++;
}
newStr[i] = '\0';
printf("%s", newStr);
答案 1 :(得分:1)
你的功能必须做三件事,因为它通过句子找到单词。 (1)始终检查字符串的结尾,以防止在句子结束后尝试阅读; (2)在所提供的指数上找到并打印所要求的字; (3)处理用户请求大于可用字索引的条件。
(你应该总是测试你在函数中传递的句子,以确保指针不是NULL
指针,并且句子的内容只是表示'\0'
字符的0, 1, 2, ...
字符空字符串)
执行此操作的简单方法(在测试输入字符串之后)是设置连续循环,重复读取单词的字符,检查是否是要打印的单词(如果是这样打印) ,如果没有读取并丢弃下一个单词之前的所有非字母字符,然后重复。
像以下作品一样简单。它采用句子(或句子中的更新位置)和单词的索引来打印零索引,例如(1, 2, 3, ...
)然后循环上述。
(注意:您可以通过初始化n=1;
而不是0
将零索引方案更改为#include <stdio.h>
#include <ctype.h>
int prnword (const char *s, int nwrd)
{
int n = 0; /* word counter */
char *p = s; /* pointer to s */
if (!s || !*s) { /* test s not NULL and not empty */
fprintf (stderr, "error: string NULL, empty or at end.\n");
return 0;
}
for (;;) { /* loop continually until exit condition reached */
while (*p && isalpha(*p)) { /* loop over chars in s */
if (n == nwrd) /* if requested index */
putchar (*p); /* print all chars */
p++; /* increment pointer */
}
while (*p && !isalpha(*p)) /* iterate find next alpha */
p++;
if (++n > nwrd) /* if past our word, break */
break;
if (!*p) /* if end reached, break */
break;
}
if (n <= nwrd) { /* check request exceeds avaialble words */
fprintf (stderr, "error: request word '%d' "
"exceeds available wprds indexes.\n", nwrd);
return 0;
}
putchar ('\n'); /* tidy up with new line */
return p - s; /* return number of chars to next alpha */
}
int main (void) {
char str[] = "hello big panda";
int nchars = 0;
/* example -- all words in order
* passing update string position
*/
nchars = prnword (str, 0);
nchars += prnword (str + nchars, 0);
nchars += prnword (str + nchars, 0);
putchar ('\n');
/* request exceed available zero-based word indexes */
nchars = 0;
nchars += prnword (str, 3);
putchar ('\n');
/* print 2nd word only */
nchars = 0;
nchars = prnword (str, 1);
putchar ('\n');
return 0;
}
字数方案 - 但由于C中的所有内容都是零索引,这留给你)
prnword
示例使用/输出
注意0
的第一个调用块打印句子中的每个单词,保存先前调用返回的字符数,并使用它来启动读取所需单词的第一个字符的函数,意思是你一直在寻找单词索引$ ./bin/words
hello
big
panda
error: request word '3' exceeds available wprds indexes.
big
。
第二个电话故意提供一个索引一个超过最后一个字以强制处理错误。
最后,最后一次电话会从头开始简单地说“去打印字2”(索引1)。
示例使用/输出
string url ="http://www.whatever.example.com/Function.php";
var reqparam = new System.Collections.Specialized.NameValueCollection();
reqparam.Add("name", "John Doe");
try
{
using (System.Net.WebClient client = new System.Net.WebClient())
{
byte[] responsebytes = client.UploadValues(url, "POST", parameters);
string output = System.Text.Encoding.UTF8.GetString(responsebytes);
}
}
catch (Exception x)
{
//an error occured
}
仔细看看,如果您有疑问,请告诉我。