如何从带空格的字符串连接C中的字符?
How to concatenate characters in C from a string with spaces?
我试图在 C 中连接字符,但没有成功。问题是获取一个字符串,检查该字符串中是否有 space,并根据该主字符串中 space 之后的字母创建一个新字符串。
示例:
主字符串:hello world wide
新字符串:hww
我不知道如何连接。我在互联网上进行了研究,发现 strcpy
和 strcat
函数很有用,但即使使用它们我也不成功。以同样的方式,我尝试做类似 result += string[i + 1]
的事情,但它不起作用。
源代码
#include <stdio.h>
#include <string.h>
int main()
{
char string[] = "str ing placeholder";
int stringLength = strlen(string);
int i;
char result;
for (i = 0; i < stringLength; i++)
{
if (string[i] == ' ')
{
printf("Found space at the index: %d\n", i);
result = string[i + 1];
printf("\nNext char: %c\n", result);
}
}
return 0;
}
希望有人能指导我。我认为我的程序逻辑没有错,我只需要将字符串的第一个字符和字符串的 space 后面的每个字符连接成一个新的字符串,然后呈现这个新形成的字符串.
如果要将结果连接成一个字符串,'result' 应该是一个字符数组:
//...
char result[4];
int currentWord = 0;
for (i = 0; i < stringLength; i++)
{
if (string[i] == ' ')
{
result[currentWord] = string[i + 1];
currentWord++;
}
}
您的代码的另一个问题是它不会读取第一个单词,因为它之前没有 space。解决此问题的一种方法是将字符串的第一个分配给单词的第一个元素:
char result[4];
if (string[0] != ' ') result[0] = string[0];
int currentWord = 1;
你也可以使用'strtok_r'来简化事情,一种实现方式是这样的:
char *saveptr;
result[0] = strtok_r(string, " ", &saveptr)[0];
for (i = 1; i < 3; i++) // 3 is the word count
{
result[i] = strtok_r(NULL, " ", &saveptr)[0];
}
请注意,'result' 数组的大小是任意的,只适用于 3 个或更少的单词。您可以创建一个类似的 for 循环来计算字符串中 space 的数量,以找出有多少个单词。
如果您需要更改源数组,使其仅包含存储字符串中单词的第一个字符,则程序可以采用以下方式。
#include <string.h>
#include <stdio.h>
int main( void )
{
char s[] = "str ing placeholder";
const char *delim = " \t";
for ( char *p = s + strspn( s, delim ), *q = p; *q; p += strspn( p, delim ) )
{
*q = *p;
if ( *q ) ++q;
p += strcspn( p, delim );
}
puts( s );
return 0;
}
程序输出为
啜饮
您不能使用 C 中的 +
或 +=
运算符连接字符串或字符。您必须定义一个 char
的数组,其大小足以接收新字符串并存储适当的一次输入一个字符。
您可能希望将每个单词的首字母而不是 space 之后的每个字符复制到缓冲区。
这是修改后的版本:
#include <stdio.h>
int main() {
const char text[] = "Hello wild world!";
char initials[sizeof text]; // array for the new string
int i, j;
char last = ' '; // pretend the beginning of the string follows a space
// iterate over the main string, stopping at the null terminator
for (i = j = 0; text[i] != '[=10=]'; i++) {
// if the character is not a space but follows one
if (text[i] != ' ' && last == ' ') {
// append the initial to the new string
initials[j++] = text[i];
}
last = text[i]; // update the last character
}
initials[j] = '[=10=]'; // set the null terminator in the new string.
printf("%s\n", initials); // output will be Hww
return 0;
}
我试图在 C 中连接字符,但没有成功。问题是获取一个字符串,检查该字符串中是否有 space,并根据该主字符串中 space 之后的字母创建一个新字符串。
示例:
主字符串:hello world wide
新字符串:hww
我不知道如何连接。我在互联网上进行了研究,发现 strcpy
和 strcat
函数很有用,但即使使用它们我也不成功。以同样的方式,我尝试做类似 result += string[i + 1]
的事情,但它不起作用。
源代码
#include <stdio.h>
#include <string.h>
int main()
{
char string[] = "str ing placeholder";
int stringLength = strlen(string);
int i;
char result;
for (i = 0; i < stringLength; i++)
{
if (string[i] == ' ')
{
printf("Found space at the index: %d\n", i);
result = string[i + 1];
printf("\nNext char: %c\n", result);
}
}
return 0;
}
希望有人能指导我。我认为我的程序逻辑没有错,我只需要将字符串的第一个字符和字符串的 space 后面的每个字符连接成一个新的字符串,然后呈现这个新形成的字符串.
如果要将结果连接成一个字符串,'result' 应该是一个字符数组:
//...
char result[4];
int currentWord = 0;
for (i = 0; i < stringLength; i++)
{
if (string[i] == ' ')
{
result[currentWord] = string[i + 1];
currentWord++;
}
}
您的代码的另一个问题是它不会读取第一个单词,因为它之前没有 space。解决此问题的一种方法是将字符串的第一个分配给单词的第一个元素:
char result[4];
if (string[0] != ' ') result[0] = string[0];
int currentWord = 1;
你也可以使用'strtok_r'来简化事情,一种实现方式是这样的:
char *saveptr;
result[0] = strtok_r(string, " ", &saveptr)[0];
for (i = 1; i < 3; i++) // 3 is the word count
{
result[i] = strtok_r(NULL, " ", &saveptr)[0];
}
请注意,'result' 数组的大小是任意的,只适用于 3 个或更少的单词。您可以创建一个类似的 for 循环来计算字符串中 space 的数量,以找出有多少个单词。
如果您需要更改源数组,使其仅包含存储字符串中单词的第一个字符,则程序可以采用以下方式。
#include <string.h>
#include <stdio.h>
int main( void )
{
char s[] = "str ing placeholder";
const char *delim = " \t";
for ( char *p = s + strspn( s, delim ), *q = p; *q; p += strspn( p, delim ) )
{
*q = *p;
if ( *q ) ++q;
p += strcspn( p, delim );
}
puts( s );
return 0;
}
程序输出为
啜饮
您不能使用 C 中的 +
或 +=
运算符连接字符串或字符。您必须定义一个 char
的数组,其大小足以接收新字符串并存储适当的一次输入一个字符。
您可能希望将每个单词的首字母而不是 space 之后的每个字符复制到缓冲区。
这是修改后的版本:
#include <stdio.h>
int main() {
const char text[] = "Hello wild world!";
char initials[sizeof text]; // array for the new string
int i, j;
char last = ' '; // pretend the beginning of the string follows a space
// iterate over the main string, stopping at the null terminator
for (i = j = 0; text[i] != '[=10=]'; i++) {
// if the character is not a space but follows one
if (text[i] != ' ' && last == ' ') {
// append the initial to the new string
initials[j++] = text[i];
}
last = text[i]; // update the last character
}
initials[j] = '[=10=]'; // set the null terminator in the new string.
printf("%s\n", initials); // output will be Hww
return 0;
}