返回c中第一个空格后字符串的其余部分
我正在编写一个程序,在第一个空格后返回字符串的剩余部分返回c中第一个空格后字符串的其余部分,c,C,我正在编写一个程序,在第一个空格后返回字符串的剩余部分 "I had a bad day" 应该回来 "had a bad day" 这就是我目前所拥有的 char* next_word(char* str){ char s[100]; int index = 0; int i = 0; int counter = 0; for(i = 0; i < strlen(str); i++){ if(str[i] == ' '){
"I had a bad day"
应该回来
"had a bad day"
这就是我目前所拥有的
char* next_word(char* str){
char s[100];
int index = 0;
int i = 0;
int counter = 0;
for(i = 0; i < strlen(str); i++){
if(str[i] == ' '){
index = i+1;
for(index; index < strlen(str); index++){
s[counter] = str[index];
counter = counter + 1;
}
s[index] = '\0';
return s;
}
}
return index;
}
char*下一个单词(char*str){
chars[100];
int指数=0;
int i=0;
int计数器=0;
对于(i=0;i
我在char*str中循环,找到第一个空空间的索引,然后从那里我做了另一个循环,从索引+1开始打印字符串的其余部分。由于某种原因,当我写s[counter]=str[index]时,我不相信它会将字符从str复制到s。
当我尝试在循环后返回s时,我什么都没有得到。是否可以将char添加到空char s[100],然后将完整字符串返回为s?
谢谢您的next_word()
函数正在返回一个局部(函数)变量,这将导致未定义的行为。您必须将s
(在您的情况下)作为输入,或在函数中malloc字符缓冲区。然后你就可以复印了。我希望您选择第一种选择,并且不要忘记检查输入字符串的长度,以便在复制时不会交叉大小
另外,当没有找到空格时,next_word()
返回index
?这显然是一个错误,您的代码将无法编译
对于代码,只要找到第一个空格,就可以从第一个循环中断,然后继续复制。不应返回
s
,因为它是堆栈上的局部变量。您可以简单地将指针返回到str
参数中,因为str
在返回时仍然有效
#include <string.h>
const char* TheString = "I had a bad day";
const char* stringAfterBlank(const char* str)
{
const char* blank = strchr(str, ' ');
if (blank != NULL)
{
return ++blank;
}
return "";
}
void main(int argc, char** argv)
{
const char* restOfTheString = stringAfterBlank(TheString);
// restOfTheString is "had a bad day" pointing into TheString
}
#包括
const char*TheString=“我过了糟糕的一天”;
常量字符*stringAfterBlank(常量字符*str)
{
常量字符*空白=strchr(str',);
if(空白!=NULL)
{
返回++空白;
}
返回“”;
}
void main(整型argc,字符**argv)
{
const char*restofstring=stringAfterBlank(字符串);
//剩余的字符串指向字符串“度过了糟糕的一天”
}
如果需要字符串的副本,则可以使用
strdup
。如果您这样做了,请不要忘记释放,您不应该返回局部变量。完成所需任务的最简单方法是对指针进行操作
正如您所希望的,有一种解决方案仅使用stdio.h:
#include <stdio.h>
char* next_word(char* str);
int main()
{
char* arg = "I had a bad day!";
//Print every "next_word"
char* words = arg;
do{
printf("%s\n", words);
} while(words = next_word(words));
}
char* next_word(char* str)
{
while(*str != '\0'){
if(*str++ == ' ')
return str;
}
return NULL;
}
#包括
char*下一个单词(char*str);
int main()
{
char*arg=“我今天过得很糟糕!”;
//打印每个“下一个单词”
char*words=arg;
做{
printf(“%s\n”,字);
}while(单词=下一个单词);
}
char*下一个单词(char*str)
{
而(*str!='\0'){
如果(*str++='')
返回str;
}
返回NULL;
}
next\u word()
函数返回字符*和int?你的代码正在编译吗?另外,s
是一个局部变量。因此,返回s
是未定义的行为。难道您没有从编译器获得任何诊断消息吗@kuro,我的代码已经编译了,我想我只返回了s,这是一个字符s@serenitynow13,那么代码中的返回索引语句呢?这是打字错误吗?谢谢你的解答!我尝试只使用stdio和stdlib来实现这一点。strchr
是一个非常简单的函数,您可以轻松地用自己的代码替换它(搜索“strchr实现”)。