在 C 中获取后缀
Get suffixes in C
我正在尝试获取输入字符串的后缀,但我正在获取前缀我该如何修复它?
例如输入字符串 "Hello" 的预期结果是:
Hello
ello
ell
el
e
现在回归:
Hello
Hell
Hel
He
H
谢谢
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **suffix;
void panic(char *m) {
fprintf(stderr, "%s\n", m);
exit(0);
}
int main(int argc, char *argv[]) {
int n, i;
if (argc != 2)
panic("wrong parameters");
n = strlen(argv[1]);
suffix = (char **)malloc(n * sizeof(char *));
if (suffix == NULL)
error("Memoria no disponible");
for (i = 0; i < n; ++i) {
suffix[i] = (char *)malloc((n + 1 - i) * sizeof(char));
if (suffix[i] == NULL)
error("Memoria no disponible");
sprintf(suffix[i], "%s", argv[1]);
argv[1][n - 1 - i] = '[=12=]';
}
for (i = 0; i < n; i++) {
printf("%d %s\n", i, suffix[i]);
}
return 0;
}
只需替换这两个语句
sprintf(suffix[i], "%s", argv[1]);
argv[1][n - 1 - i] = '[=10=]';
对于这一个声明
sprintf(suffix[i], "%s", argv[1] + i );
使用莫斯科的 Vlad 答案。
你现在应该相关的东西,只读argc
和argv
,不要覆盖它们。虽然理论上你可以这样做,但实际上它既无用又危险。
应始终保持 code/logic 尽可能简单。
可以使用 <ctrl-c>
and/or EOF
停止以下提议的代码
#include <stdio.h>
#include <string.h>
int main( void )
{
char buffer[ 256 ];
// get the string
while( fgets( buffer, sizeof( buffer ), stdin ) )
{
//output string, dropping leading char at each loop iteration
size_t length = strlen( buffer );
for( size_t i=0; i<length; i++ )
{
printf( "%s\n", &buffer[i] );
}
}
}
这里是一个典型的运行程序:
注意:第一行是用户输入的字符串。
this is a string
this is a string
his is a string
is is a string
s is a string
is a string
is a string
s a string
a string
a string
string
string
tring
ring
ing
ng
g
我正在尝试获取输入字符串的后缀,但我正在获取前缀我该如何修复它?
例如输入字符串 "Hello" 的预期结果是:
Hello
ello
ell
el
e
现在回归:
Hello
Hell
Hel
He
H
谢谢
#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **suffix;
void panic(char *m) {
fprintf(stderr, "%s\n", m);
exit(0);
}
int main(int argc, char *argv[]) {
int n, i;
if (argc != 2)
panic("wrong parameters");
n = strlen(argv[1]);
suffix = (char **)malloc(n * sizeof(char *));
if (suffix == NULL)
error("Memoria no disponible");
for (i = 0; i < n; ++i) {
suffix[i] = (char *)malloc((n + 1 - i) * sizeof(char));
if (suffix[i] == NULL)
error("Memoria no disponible");
sprintf(suffix[i], "%s", argv[1]);
argv[1][n - 1 - i] = '[=12=]';
}
for (i = 0; i < n; i++) {
printf("%d %s\n", i, suffix[i]);
}
return 0;
}
只需替换这两个语句
sprintf(suffix[i], "%s", argv[1]);
argv[1][n - 1 - i] = '[=10=]';
对于这一个声明
sprintf(suffix[i], "%s", argv[1] + i );
使用莫斯科的 Vlad 答案。
你现在应该相关的东西,只读argc
和argv
,不要覆盖它们。虽然理论上你可以这样做,但实际上它既无用又危险。
应始终保持 code/logic 尽可能简单。
可以使用 <ctrl-c>
and/or EOF
#include <stdio.h>
#include <string.h>
int main( void )
{
char buffer[ 256 ];
// get the string
while( fgets( buffer, sizeof( buffer ), stdin ) )
{
//output string, dropping leading char at each loop iteration
size_t length = strlen( buffer );
for( size_t i=0; i<length; i++ )
{
printf( "%s\n", &buffer[i] );
}
}
}
这里是一个典型的运行程序:
注意:第一行是用户输入的字符串。
this is a string
this is a string
his is a string
is is a string
s is a string
is a string
is a string
s a string
a string
a string
string
string
tring
ring
ing
ng
g