奇怪的字母从数组c编程打印出来

时间:2017-12-04 17:01:44

标签: c arrays printf

我正在尝试删除字符串之间的空格,并使用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;
}

但我不想更改传递给它的字符串

2 个答案:

答案 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
}

仔细看看,如果您有疑问,请告诉我。